интерполяции переменных в консоли

интерполяции переменных в консоли

12.07.2013 10:56:15 Просмотров 28 Источник

Это, вероятно, очень простой вопрос, но по какой-то причине я, кажется, переоцениваю очевидное.

У меня есть переменная filepath=/tmp/name

Чтобы получить доступ к переменной, я знаю, что могу сделать это $filepath

В моем скрипте оболочки я попытался сделать что-то вроде этого (задние тики предназначены)

`tail -1 $filepath_newstap.sh`

Эта линия терпит неудачу, ДУУ! потому что переменная не вызывается $filepath_newstap.sh

Как я могу добавить _newstap.shк имени переменной? Обратите внимание, что обратные галочки предназначены для оценки выражения

У вопроса есть решение - Посмотреть?

Ответы - интерполяции переменных в консоли / variable interpolation in shell

user539810

12.07.2013 10:58:39

Используйте фигурные скобки вокруг имени переменной:

`tail -1 ${filepath}_newstap.sh`
https://stackoverflow.com/questions/17622106/variable-interpolation-in-shell/17622155#comment53681376_17622155
Вам не нужны двойные кавычки?
https://stackoverflow.com/questions/17622106/variable-interpolation-in-shell/17622155#comment53681460_17622155
@michaelsnowden не обязательно. Чтобы быть в безопасности, да, но вопрос явно указывал путь без пробелов и далее предполагал, что проблема была $filepath_newstap.shинтерпретируется как ${filepath_newstap}.sh, а не как предполагаемый ${filepath}_newstap.sh, что решило бы проблему.
https://stackoverflow.com/questions/17622106/variable-interpolation-in-shell/17622155#comment53681535_17622155
@michaelsnowden, который не говорит мне ничего, о чем я уже не знаю. Как вы думаете, зачем нужны двойные кавычки?
https://stackoverflow.com/questions/17622106/variable-interpolation-in-shell/17622155#comment53682183_17622155
Потому что вы пытаетесь сделать интерполяцию строк, и для этого вам нужны двойные кавычки
https://stackoverflow.com/questions/17622106/variable-interpolation-in-shell/17622155#comment53682529_17622155
расширение параметра @michaelsnowden происходит либо в двойных кавычках, либо вне кавычек полностью. Одинарные кавычки или разделительные символы с кавычками или другими символами, недопустимыми в идентификаторах, являются единственным способом предотвратить расширение параметра. Например, "$filepath"_fooи ${filepath}_fooбудут расширяться до /tmp/name_foo. Однако '$filepath'_foofilepath'_foo, "$"filepath_fooи $"filepath"_fooполностью избегали бы расширения. Поэтому export PATH=$PATH:$addpath работает, чтобы добавить :$addpath (которой будет зависеть от параметров расширения) на PATH переменной среды.
https://stackoverflow.com/questions/17622106/variable-interpolation-in-shell/17622155#comment53682650_17622155
Кстати, оба других ответа содержат один и тот же ответ. Принятый ответ , однако, также предоставляет альтернативы и объяснение поведения, описываемого ОП.
https://stackoverflow.com/questions/17622106/variable-interpolation-in-shell/17622155#comment74945196_17622155
@michaelsnowden вы, вероятно, путаете ` )
Является ответом!
choroba

12.07.2013 10:59:07

Воспользуйся

"$filepath"_newstap.sh

или

${filepath}_newstap.sh

или

$filepath\_newstap.sh

_- допустимый символ в идентификаторах. Точки нет, поэтому оболочка попыталась интерполировать $filepath_newstap.

Вы можете использовать set -u Для того, чтобы раковина выходит с ошибкой, когда вы обращаетесь к неопределенной переменной.

https://stackoverflow.com/questions/17622106/variable-interpolation-in-shell/17622165#comment25654638_17622165
Возможно также упомянуть set -u, который вызывает прерывание сценария, если вы ссылаетесь на неопределенную переменную.
https://stackoverflow.com/questions/17622106/variable-interpolation-in-shell/17622165#comment85421047_17622165
В чем разница между использованием ${}и двойными кавычками? Должен ли я предпочесть одно другому?
https://stackoverflow.com/questions/17622106/variable-interpolation-in-shell/17622165#comment85433005_17622165
@user31389: разница в том, что когда переменная содержит пробелы, то работают только двойные кавычки.
vyom

12.07.2013 11:01:59

В bash:

tail -1 ${filepath}_newstap.sh
Закрыть X