Передача переменных в скрипт

Передача переменных в скрипт

В чем разница между:

./script.sh "$VARIABLE"

и

./script.sh ${VARIABLE}

Есть ли?

решение1

$VARIABLEи ${VARIABLE}фактически являются тем же, если они являются отдельными словами. Но обратите внимание на следующий пример, особенно в сценарии

VARIABLE=USER
echo $VARIABLE

вы получаете вывод

USER

но когда вы печатаете

echo $VARIABLE1

ожидая получить

USER1

вы ничего не получите, так как переменная не VARIABLE1определена

Но если вы используете

echo ${VARIABLE}1

вы получаете ожидаемый USER1результат.

решение2

от Шона Дж. Гоффа:$VAR против ${VAR} и цитировать или нет

VAR=$VAR1 — это упрощенная версия VAR=${VAR1}. Есть вещи, которые может делать вторая версия, но не может первая, например, ссылаться на индекс массива (непереносимо) или удалять подстроку (переносимо в POSIX). См. раздел «Подробнее о переменных» в руководстве Bash Guide for Beginners и «Расширение параметров в спецификации POSIX».

Использование кавычек вокруг переменной, как в rm -- "$VAR1" или rm -- "${VAR}", является хорошей идеей. Это делает содержимое переменной атомарной единицей. Если значение переменной содержит пробелы (ну, символы в специальной переменной $IFS, пробелы по умолчанию) или символы подстановки, и вы не заключаете его в кавычки, то каждое слово рассматривается для генерации имени файла (подстановки), расширение которого создает столько же аргументов для всего, что вы делаете.

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