Я выполнил следующую последовательность команды:
$ now=$(date)
$ echo _$now_
_
$ echo _ $now _
_ Mon Sep 22 09:53:44 IST 2014 _
Почему имеет вывод _$now_
только _
?
От man bash
:
DEFINITIONS
The following definitions are used throughout the rest of this document.
blank A space or tab.
word A sequence of characters considered as a single unit by the shell.
Also known as a token.
name A word consisting only of alphanumeric characters and underscores,
and beginning with an alphabetic character or an underscore. Also
referred to as an identifier.
...
PARAMETERS
A parameter is an entity that stores values. It can be a name, a number,
or one of the special characters listed below under Special Parameters.
A variable is a parameter denoted by a name.
переменная А может только иметь алфавиты, числа и подчеркивания. И так now_
имя действительной переменной и интерпретируется как таковой.
можно разграничить имя переменной по-разному:
_"$now"_
_${now}_
_$now"_"
_$now'_'
Или любая комбинация вышеупомянутого.
потому что _
часть имени переменной в Вашем echo _$now_
использование echo \_$now\_
вместо этого.
Также можно использовать это только в линейной команде: echo _$(date)_
Терпите меня на мгновение, это требует небольшого количества объяснения.
Сначала, то, почему имеет вывод _ $(date) _
, _ Mon Sep 22 03:30:34 MDT 2014 _
? Поскольку это буквально говорит эху производить _ сначала тогда выходной $ (дата) тогда _. Пробелы разделяют переменные для эха.
Теперь попытка echo _$(date)
, не отметьте пространство между _
и $(date)
. В этом случае вывод будет _Mon Sep 22 03:32:40 MDT 2014
. Что это делает? Вы говорите echo
связывать подчеркивание с выводом $(date)
.
то же самое Попытки с _$PWD
, который свяжет Ваш рабочий каталог с подчеркиванием. Теперь попробуйте echo $PWD_
. Вывод будет пробелом. Почему? потому что PWD_
несуществующая переменная среды, и как другие упомянули _
, допустимый символ для переменной среды, например, $XDG_CURRENT_DESKTOP
.
Итак, почему _$PWD_
дал бы _
? Поскольку Вы говорите echo
конкатенировать _
с выводом несуществующей переменной среды. Так _
печатается, но $PWD_
вывод является пробелом, таким образом, Вы буквально видите _
связанный с тем пустым выводом.
_$now_
интерпретируется как
_${now_}
, который является, в Вашем случае, очевидно, строка concat '_' и ''. Используйте поэтому
_${now}_
вместо этого. Это намного более ясно читать.