Почему имеет вывод _ $ _ при выполнении на терминале?

Я выполнил следующую последовательность команды:

$ now=$(date)
$ echo _$now_
_
$ echo _ $now _
_ Mon Sep 22 09:53:44 IST 2014 _

Почему имеет вывод _$now_ только _?

4
задан 22 September 2014 в 11:45

4 ответа

От 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'_'

Или любая комбинация вышеупомянутого.

11
ответ дан 17 November 2019 в 13:36

потому что _ часть имени переменной в Вашем echo _$now_

использование echo \_$now\_ вместо этого.

Также можно использовать это только в линейной команде: echo _$(date)_

10
ответ дан 17 November 2019 в 13:36

Терпите меня на мгновение, это требует небольшого количества объяснения.

Сначала, то, почему имеет вывод _ $(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_ вывод является пробелом, таким образом, Вы буквально видите _ связанный с тем пустым выводом.

7
ответ дан 17 November 2019 в 13:36
_$now_ 

интерпретируется как

_${now_}

, который является, в Вашем случае, очевидно, строка concat '_' и ''. Используйте поэтому

_${now}_

вместо этого. Это намного более ясно читать.

1
ответ дан 17 November 2019 в 13:36

Другие вопросы по тегам:

Похожие вопросы: