По какой-то странной причине я попытался использовать «» в качестве разделителя слов в идентификаторах, например:
$ export foo'bar=1
>
> ^C
$
В результате , как показано выше, идентификационные EST на быстрые изменения «>» и система , очевидно , ожидает получения дополнительной информации о моей стороны. Как видите, мне пришлось нажать Ctrl-C, чтобы сбежать. То же самое происходит с использованием других команд, таких как
$ ls foo'bar
$ mkdir foo'bar
Меня интересует смысл всего этого, вот что имеет особое значение "" "в терминальных командах (настолько особенное, что оно разбирается даже внутри идентификаторов).
Дополнительно: кроме того, я также хотел бы знать набор специальных или иных недопустимых символов в именах файлов и папок, как в Unix-подобных системах, так и в системах Windows (чтобы получить общее подмножество безопасных) (в частности, как насчет всех не-ASCII?).
Спасибо денис
источник
Ответы:
Символ 'является очень мощным символом, когда используется в любой команде оболочки. В основном '(знаки апостроф) отключает все виды преобразований или модификаций. Он рассматривал бы все, что заключено в метки, как единый объект, то есть как один параметр. Абсолютно никакой замены или расширения не произойдет.
Пример:
выдаст на выходе
$HOME
саму строку и не выведет путь к вашему домашнему каталогу. Поскольку одинарные кавычки предотвращают любое расширение, подстановка и простое рассматривает все, что присутствует, как простой параметр сам по себе.Если вы хотите использовать апостроф как есть, вы должны избежать его:
Если он не экранирован, он будет ждать закрытия своей пары, как это произошло в вашем первом примере.
Итак, исправлено, ваша команда будет:
ПРИМЕЧАНИЕ. Как заметил Милан Тодорович, это будет недействительно, поскольку в этом случае нельзя использовать апостроф.
источник
Персонаж
'
- это особый характер. Вы используете его, чтобы отметить часть записи командной строки, которая не будет изменена (например, без замены подстановочных знаков). Например:Это означает, что аргументом
ls
былоbla*
и не все, что начинается сbla
.Причина, по которой вы получаете
>
символ, заключается в том, что вы должны использовать один'
для открытия и один'
для закрытия части, которая не будет изменена.Если вы хотите использовать
'
в папке имен вы должны экранировать его так:\'
. Так что если вы хотите перечислить папку с именем,foo'bar
вы должны напечататьls foo\'bar
.О, и я не уверен, возможно ли использовать
'
в именах переменных среды. Я думаю, что вы не можете использоватьexport foo\'bar=1
,Надеюсь это поможет.
источник