通过前置变量赋值临时修改命令运行环境

引入

所谓的前置变量赋值指的是在 BASH 命令之前添加变量的赋值语句,形如 var=value cmd args ,主要用于在命令运行期间临时地修改环境变量,从而不需要全局修改环境变量。这种方式设置的变量只会在命令运行期间生效,不会影响当前的shell环境。

示例

示例一:通过临时修改 IFS 变量值读取和处理 CSV 文件

IFS(Internal Field Separator)是BASH中与词拆分(词分解相关内容可见此博客)相关的一个环境变量。文件内容如下:
在这里插入图片描述
通过下面的代码可以正确地读取CSV文件并区分不同的字段:

while IFS=',' read name age  # 为 read 命令临时修改 IFS 值
do
	echo "$name is $age years old."
done < name_age.csv

在这里插入图片描述

示例二:消除本地化字符集设置

可以通过 locale 命令查看当前用户关于字符集的所有本地设置,例如我的本地设置为:
在这里插入图片描述
但不同的字符集,会影响一些与字符串操作相关的命令,如 sort ,为避免因为本地化设置引起的各种奇奇怪怪的问题,可以通过 LC_ALL=C <CMD> 在命令运行期间强制覆写所有本地化设置:
在这里插入图片描述

误区

前置赋值的变量只有在命令运行过程中有效,比如这条命令 name=balabala echo "hello $name" 并不能按照预期在终端打印 hello balabala,原因在于shell在echo命令运行之前解析并展开了变量name的值,此时name变量设置并未生效,所以展开是一个空值。因此,关键在于防止变量提前展开,可以修改为 name=balabala bash -c 'echo "hello $name"'(注意最外层的单引号),此时 name 只在bash命令运行期间展开,可以正确输出期望的结果。
在这里插入图片描述

水平有限,如有错误,欢迎在评论区指正

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值