Как создать специальную расширяемую фразу в bash?

Имена Unix-файлов могут содержать любые символы (кроме '/' или '\0'), так что на самом деле это вопрос об оболочки; список мета-символов, которые нуждаются в экранировании, зависит от оболочки, а также от конкретной конфигурации оболочки. Похоже, что вы используете bash; другие оболочки не будут работать, если выражения ? или * Glob останутся без кавычек:

$ mkdir test && cd test
$ ls
$ touch *foo
$ ls
*foo
$ exec zsh
% touch *bar
zsh: no matches found: *bar
% ls
*foo
% 

bash может установить опцию failglob оболочки как zsh в этом отношении. В общем, процитируйте все или, что еще лучше, не помещайте мета-символы (или даже пробелы) в имена файлов unix, так как этот путь может привести к тому, что rm -rf вызовет уничтожение целых деревьев каталогов, или другие случайные сбои (файл -i будет считан в качестве аргумента), или проблемы безопасности в коде оболочки.

12
12.01.2018, 05:37
0 ответов

Теги

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