2015-02-10 14 views
0

Я новичок в программировании скриптов bash, и когда я изучил расширение переменной, я озадачен переменной.
1.when Я хочу, чтобы определить переменную, можно сделать следующим образом:bash: переменная с двойными кавычками

name=foo 
name="foo" 
name='foo' 

чем разница между themm? 2.when Я хочу напечатать переменную, можно сделать следующим образом»

echo $name 
echo "$name" 
echo "$(name)" 

3.Я также сталкиваются часть следующим образом:

name=$(date) 

что„()“делают, почему он может разрешить команду?

Я гугле мой вопрос и прочитать некоторые документы, например, (http://www.serverwatch.com/tutorials/article.php/3898896/Single-vs-Double-Quotes-in-Bash.htm), но я до сих пор озадачивает, может кто-нибудь объяснить это ясно?

+0

(3) называется «подстановка команды». См. Http://mywiki.wooledge.org/CommandSubstitution –

+0

(2) - 'echo $ name' разбивает содержимое' $ name' на слова, расширяет globs и передает каждое слово в качестве отдельного аргумента в 'echo'. Таким образом, он изменяет новые строки в пробелы и заменяет '*', окруженный пробелами, списком файлов в текущем каталоге. 'echo '$ name" ', напротив, испускает точное содержимое' $ name', ** если ** это значение, которое 'echo' по своей сути нарушено и неспособно обрабатывать (для многих реализаций' echo', '-n' и' -E' являются такими значениями). Если вы хотите что-то, что работает как 'echo', но всегда верно,' printf '% s \ n' '$ name "' является безопасной и переносимой ставкой. –

+0

(1) - все они идентичны в приведенном здесь прецеденте. См. Http://mywiki.wooledge.org/Quotes для получения более общей документации. –

ответ

1

name=foo, так как значение отсутствует внутри кавычек, оно не принимает значение, которое имеет такие пробелы, как name=foo bar

name='foo' это не расширит текст, присутствующий в значении. То есть foo $bar будет рассматриваться как литерал foo $bar. Он не будет расширяться $b

name="foo" значения в двойных кавычках будут проанализированы или расширены.

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