我一直在想这两者之间有什么区别:
CAROOT='certificates'; echo $CAROOT
- 打印值,用作;
两个命令之间的分隔符CAROOT='certificates' echo $CAROOT
- 打印空值。
我想知道为什么前一个命令有效而后一个命令无效?
答案1
以下命令行及其输出可以帮助解释其工作原理。
$ LANG=C bash -c 'echo LANG=$LANG'; echo LANG=$LANG
LANG=C
LANG=sv_SE.UTF-8
LANG=C
仅有空格仅对以下命令起作用,之后将再次使用旧的 LANG 设置。
但是为什么在第二种情况下会打印一个空值?我会这样解释:变量将直接由 shell 扩展。这与 的情况不同bash -c 'echo LANG=$LANG'
,在 中,变量最初受 [引号] 保护,稍后在处理完前一个变量设置命令后才会扩展。
当您想要暂时更改语言时,通常使用仅使用空格而没有分号的方法,如下面的示例所示,标题更改为标准语言(英语)。
$ df -h
Filsystem Storlek Använt Ledigt Anv% Monterat på
udev 16G 0 16G 0% /dev
tmpfs 3,2G 1,6M 3,2G 1% /run
/dev/sda5 88G 32G 52G 39% /
tmpfs 16G 0 16G 0% /dev/shm
tmpfs 5,0M 4,0K 5,0M 1% /run/lock
tmpfs 16G 0 16G 0% /sys/fs/cgroup
/dev/sdb7 3,5T 998G 2,4T 30% /media/multimed-2
tmpfs 3,2G 20K 3,2G 1% /run/user/1000
$ LANG=C df -h
Filesystem Size Used Avail Use% Mounted on
udev 16G 0 16G 0% /dev
tmpfs 3,2G 1,6M 3,2G 1% /run
/dev/sda5 88G 32G 52G 39% /
tmpfs 16G 0 16G 0% /dev/shm
tmpfs 5,0M 4,0K 5,0M 1% /run/lock
tmpfs 16G 0 16G 0% /sys/fs/cgroup
/dev/sdb7 3,5T 998G 2,4T 30% /media/multimed-2
tmpfs 3,2G 20K 3,2G 1% /run/user/1000