Токены, такие как export
, declare
и им подобные, явно используют имена переменных в качестве параметров. $
обычно можно понимать как означающее "значение", поэтому $variable
означает "значение переменной
". Возьмем этот набор команд:
foo=bar
bar=baz
export $foo
( echo "$foo" )
Здесь произойдет то, что вы получите одну пустую строку вывода. Это связано с тем, что в команде export
$foo
на самом деле bar
(значение foo
), поэтому фактическая выполняемая команда экспорт бар
. Поскольку foo
не экспортируется, его значение по умолчанию равно null. Однако, если бы последняя строка была:
( echo "$bar" )
Вы получили бы вывод baz
, значение bar
, которое было экспортировано
в будущие подоболочки.
Как правило, рекомендуется использовать слабые кавычки (""
") вокруг всех ваших ссылок на переменные по причинам, включая, помимо прочего, ту, которую вы упомянули ( Например, если бы у нас было:
if [ $letter == a ]; then echo "ayyyy"; fi
, но буква
были пусты, оболочка попытается выполнить
if [ == a ]
, что является синтаксической ошибкой, но с кавычками:
if [ "$letter" == a ];
становится
if [ "" == a ];
, что является допустимым.
0 23 * * 6 [ $(date +%e -d "next saturday") -gt 3 ] && /home/me/weekly.sh