значение "'" (апостроф) в командах терминала

10

По какой-то странной причине я попытался «« как разделитель слов в идентификаторах, как в:

$ export foo'bar=1
> 
> ^C
$ 

Результат, как показано выше, id est , приглашение изменяется на ">"; и система, очевидно, ждет дополнительной информации с моей стороны. Как вы видите, мне пришлось спрятать Ctrl-C, чтобы убежать. То же самое происходит с использованием других команд, таких как

$ ls foo'bar
$ mkdir foo'bar

Мне интересно об этом, это то, что имеет особое значение в терминальных командах (настолько особенное, что его разбирают даже внутри ids).

Дополнительно: В качестве стороннего я также хотел бы знать набор специальных или других недопустимых символов в именах файлов и папок, как в Unix-подобных, так и в системах Windows (чтобы получить общее подмножество (в частности, что касается всех не-ASCII?).

Спасибо, Denis

    
задан denis 63 17.12.2012 в 14:49
источник

2 ответа

14

«Символ - очень мощный символ всякий раз, когда он используется в любой команде оболочки. В основном «(метки апострофа) отключает все виды преобразований или модификаций. Он будет рассматривать все, что связано с «метками как единое целое, то есть единственным параметром. Абсолютно никакой замены или расширения не произойдет.

Пример:

 $ echo '$HOME'

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

Если вы хотите использовать апостроф как есть, вам нужно его избежать:

 $ mkdir foo\'bar

 $ cd foo\'bar

Если он не экранирован, он будет ждать закрытия пары, как это было в первом примере.

Итак, исправлено, ваша команда будет:

 $ export foo\'bar=1

Примечание: Как заметил Милан Тодорович, это будет неверно, потому что вы не можете использовать апостроф в этом случае.

    
ответ дан Frantique 17.12.2012 в 14:55
7

Символ ' - специальный символ. Вы используете его для обозначения части записи в командной строке, которая не будет изменена (например, без замены подстановочных знаков). Например:

$ ls 'bla*'
ls: cannot access bla*: No such file or directory

Это означает, что аргумент для ls был bla* , а не все, что начинается с bla .

Причина, по которой вы получаете символ > , заключается в том, что вы должны использовать один ' для открытия и один ' для закрывающей части, которые не будут изменены.

Если вы хотите использовать ' в именах папок, вы должны выполнить его следующим образом: \' . Поэтому, если вы хотите перечислить папку с именем foo'bar , вы должны набрать ls foo\'bar .

О, и я не уверен, можно ли использовать ' в именах переменных среды. Я думаю, что вы не можете использовать export foo\'bar=1 ,

Надеюсь, что это поможет.

    
ответ дан Milan Todorovic 17.12.2012 в 14:57