Каковы различия между следующими переменными в отношении сценариев с BASH:Bash переменные форматы
$var
"$var"
${var}
"${var}"
Каковы различия между следующими переменными в отношении сценариев с BASH:Bash переменные форматы
$var
"$var"
${var}
"${var}"
Там нет никакой разницы между $var
и ${var}
и нет никакой разницы между "$var"
и "${var}"
, за исключением того, что в некоторых случаях анализатор может быть не в состоянии определить свое намерение, когда вы пользователь бывших версий. Рассматривает:
foo=hello
echo "$fooworld"
echo "${foo}world"
Первого echo
печатает ничего, так как переменная fooworld
не определена. Второй отпечаток helloworld
, потому что оболочка смогла определить, что вы ссылались на переменную foo
.
Разница между $var
и "$var"
заключается в том, что безразмерные переменные расширения вычисляются оболочкой после расширения. Таким образом:
var='ls /'
$var
Списки /
, потому что после расширения оболочки оценивает пространство в качестве маркера сепаратора, в то время как
var='ls /'
"$var"
Результаты в ls /: No such file or directory
, потому что ни одна команда с именем ls /
не доступен в среде пользователя.
Те, в кавычках обозначающие расширение один параметр и не прерывается на отдельные слова.
Обозначение ${var}
полезно, если следующий символ может быть частью имени переменной, например: "${var}name"
.
function args() {
while [ $# -gt 0 ]; do echo "arg: '$1'"; shift; done
}
# var=" a b c"
# args $var
arg: 'a'
arg: 'b'
arg: 'c'
# args "$var"
arg: ' a b c'
Нельзя ли использовать нотацию ** $ {var} ** во все времена? Будет ли это или может вызвать проблемы в зависимости от того, была ли эта переменная командой? ** var = $ (echo hi) ** или если переменная была простой строкой. Например: ** var = "hi" **? – E1Suave
«variable was a command» - вы имеете в виду, что переменная была установлена так, чтобы содержать * output * команды? нет, нет разницы. это просто переменная –
Всегда полезно использовать форму '$ {var}', если вы не считаете, что это ухудшит читаемость. – Sorpigal
Спасибо за объяснение. – E1Suave