интерполяции переменных в консоли
Это, вероятно, очень простой вопрос, но по какой-то причине я, кажется, переоцениваю очевидное.
У меня есть переменная filepath=/tmp/name
Чтобы получить доступ к переменной, я знаю, что могу сделать это $filepath
В моем скрипте оболочки я попытался сделать что-то вроде этого (задние тики предназначены)
`tail -1 $filepath_newstap.sh`
Эта линия терпит неудачу, ДУУ! потому что переменная не вызывается $filepath_newstap.sh
Как я могу добавить _newstap.sh
к имени переменной? Обратите внимание, что обратные галочки предназначены для оценки выражения
Ответы - интерполяции переменных в консоли / variable interpolation in shell

12.07.2013 10:58:39
Используйте фигурные скобки вокруг имени переменной:
`tail -1 ${filepath}_newstap.sh`


$filepath_newstap.sh
интерпретируется как ${filepath_newstap}.sh
, а не как предполагаемый ${filepath}_newstap.sh
, что решило бы проблему.



"$filepath"_foo
и ${filepath}_foo
будут расширяться до /tmp/name_foo
. Однако '$filepath'_foo
filepath'_foo, "$"filepath_foo
и $"filepath"_foo
полностью избегали бы расширения. Поэтому export PATH=$PATH:$addpath
работает, чтобы добавить :$addpath
(которой будет зависеть от параметров расширения) на PATH
переменной среды.


`
)

12.07.2013 10:59:07
Воспользуйся
"$filepath"_newstap.sh
или
${filepath}_newstap.sh
или
$filepath\_newstap.sh
_
- допустимый символ в идентификаторах. Точки нет, поэтому оболочка попыталась интерполировать $filepath_newstap
.
Вы можете использовать set -u
Для того, чтобы раковина выходит с ошибкой, когда вы обращаетесь к неопределенной переменной.

set -u
, который вызывает прерывание сценария, если вы ссылаетесь на неопределенную переменную.

${}
и двойными кавычками? Должен ли я предпочесть одно другому?
