2012-04-30 3 views

ответ

7

Там нет никакой разницы между $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 / не доступен в среде пользователя.

+0

Спасибо за объяснение. – E1Suave

2

Те, в кавычках обозначающие расширение один параметр и не прерывается на отдельные слова.

Обозначение ${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' 
+0

Нельзя ли использовать нотацию ** $ {var} ** во все времена? Будет ли это или может вызвать проблемы в зависимости от того, была ли эта переменная командой? ** var = $ (echo hi) ** или если переменная была простой строкой. Например: ** var = "hi" **? – E1Suave

+0

«variable was a command» - вы имеете в виду, что переменная была установлена ​​так, чтобы содержать * output * команды? нет, нет разницы. это просто переменная –

+0

Всегда полезно использовать форму '$ {var}', если вы не считаете, что это ухудшит читаемость. – Sorpigal

Смежные вопросы