Объяснение базового синтаксиса для переменных в bashrc

Объяснение базового синтаксиса для переменных в bashrc

Я хочу правильно экспортировать переменную. Для этого мне нужно понимать несколько вариантов синтаксиса. Я видел следующие механизмы экспорта переменной. В этом случае я использую .bashrc:

  1. export MY_VARIABLE=$USER/.gradle--$

  2. export MY_VARIABLE="$USER/.gradle"--Кавычки

  3. export MY_VARIABLE=USER/.gradle--Нет $

  4. 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 ];

что является действительным.

Связанный контент