В чем разница между `;` и пробелом при установке переменной среды перед запуском команды

Мне было интересно, в чем разница между ними:

  • 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.

Но почему во втором случае он печатает пустое значение? Я бы объяснил это так: переменная будет расширена оболочкой напрямую. Это отличается от случая с , где переменная сначала защищена [кавычками], а будет расширена позже, когда предыдущая команда установки переменной уже будет обработана.


Метод только с пробелом без точки с запятой часто используется, когда вы хотите временно изменить язык, как в следующем примере, где заголовок меняется на стандартный язык (английский).

      $ 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
Другие вопросы по тегам