В чем разница между:
./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, пробелы по умолчанию) или символы подстановки, и вы не заключаете его в кавычки, то каждое слово рассматривается для генерации имени файла (подстановки), расширение которого создает столько же аргументов для всего, что вы делаете.