Я хочу правильно экспортировать переменную. Для этого мне нужно понимать несколько вариантов синтаксиса. Я видел следующие механизмы экспорта переменной. В этом случае я использую .bashrc
:
export MY_VARIABLE=$USER/.gradle
--$export MY_VARIABLE="$USER/.gradle"
--Кавычкиexport MY_VARIABLE=USER/.gradle
--Нет $export $MY_VARIABLE=$USER/.gradle
--Все $
Каково значение знака $ в этих случаях? Почему иногда он используется, а иногда нет?
Нужны ли кавычки в случаях, когда в пути нет пробелов? А если путь содержится в $USER и содержит пробелы?
Почему слева от экспорта нет символа $?
решение1
Такие токены, как export
, declare
и подобные, явно используют имена переменных в качестве параметров. $
обычно можно понимать как «значение», поэтому $variable
означает «значение variable
». Возьмем этот набор команд:
foo=bar
bar=baz
export $foo
( echo "$foo" )
Что здесь произойдет, так это то, что вы получите одну пустую строку вывода. Это потому, что в команде export
, $foo
на самом деле bar
(значение foo
), поэтому фактическая выполненная команда — export bar
. Поскольку foo
не экспортируется, ее значение по умолчанию — null. Однако, если последняя строка была:
( echo "$bar" )
Вы получите вывод baz
, значение bar
которого было export
добавлено в последующие подоболочки.
Обычно очень хорошей идеей является использование слабых кавычек (" "
") вокругвсеваших ссылок на переменные, по причинам, включая, но не ограничиваясь тем, что вы упомянули (т.е. пробелы в именах файлов и путях). Например, если бы у нас было:
if [ $letter == a ]; then echo "ayyyy"; fi
но letter
были бы пусты, оболочка попыталась бы выполнить
if [ == a ]
что является синтаксической ошибкой, но с кавычками:
if [ "$letter" == a ];
становится
if [ "" == a ];
что является действительным.