значение & ldquo; '& rdquo; (апостроф) в терминальных командах

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

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

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

$ ls foo'bar
$ mkdir foo'bar

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

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

Спасибо, Денис.

10
задан 17 December 2012 в 18:49

2 ответа

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

Пример:

 $ echo '$HOME'

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

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

 $ mkdir foo\'bar

 $ cd foo\'bar

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

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

 $ export foo\'bar=1

ПРИМЕЧАНИЕ: Как заметил Милан Тодорович, это не будет действительным, потому что вы не можете использовать апостроф в этом случае. [ 1110]

0
ответ дан 17 December 2012 в 18:49

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

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

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

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

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

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

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

0
ответ дан 17 December 2012 в 18:49

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

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