В чем разница между `;` и пробелом при установке переменной среды перед запуском команды
Мне было интересно, в чем разница между ними:
-
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
Но почему во втором случае он печатает пустое значение? Я бы объяснил это так: переменная будет расширена оболочкой напрямую. Это отличается от случая с
Метод только с пробелом без точки с запятой часто используется, когда вы хотите временно изменить язык, как в следующем примере, где заголовок меняется на стандартный язык (английский).
$ 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