Я вижу много синтаксиса типа ${VARIABLE}
в скриптах. Какой смысл в брекетах?
2 ответа
Разграничивает переменную.
Вам может понадобиться $ FOO как переменная, но вам нужно объединить его с другим текстом. Если так, это не будет работать:
echo "$FOObar"
Это будет жаловаться, что нет переменной $ FOObar. Чтобы обойти это, разделите переменную:
echo "${FOO}bar"
Это сработает, и выведите значение $ FOO со сцепленным текстом 'bar'.
Это одна из тех вещей, которые люди часто предпочитают делать постоянно, чтобы избежать проблем там, где это действительно необходимо. Это может быть хорошей привычкой, так как bash-скриптинг не прощает синтаксических ошибок.
@mauvedeity правильно. Проблема заключается не только в том, что некоторые символы, написанные после ссылки на переменную, считаются частью этой ссылки, но и в том, что некоторые символы считаются не являющимися ее частью. Это нарушает, например, операции с переменными и использование массивов.
Массивы:
$ foo=( one two three )
$ echo $foo # implied first element with index 0
one
$ echo $foo[1] # this will not work, as [1] is not considered part of variable
one[1]
$ echo ${foo[1]} # this will work
two
$ echo ${foo[*]} # all elements
one two three
$ echo ${#foo[*]} # array length
3
$ echo ${#foo[2]} # length of third element (index 2)
5
Переменные операции
$ file=filename.txt
$ echo $file
filename.txt
$ echo ${file%.txt} # remove last match of .txt in $file
filename
Все это потерпит неудачу (как показано в примере с массивом), если мы не установим разделители явно для ссылки на переменную.