Добавить содержимое XML-файла в другой с помощью сценария bash

Легко забыть, что подстановка оболочки по-прежнему играет роль в этом процессе. Таким образом, вам нужен способ сообщить оболочке, чтобы она не раскрывала * до списка файлов. Один из способов - это то, что упомянул Крис Джонсон - цитирование.

Другой - экранирование символа * , как в

find . -iname \*.js

Сравните:

$ strace -e trace=execve find -maxdept 1 -iname *.js > /dev/null                                      
execve("/usr/bin/find", ["find", "-maxdept", "1", "-iname", "file1.js", "file2.js"], [/* 75 vars */]) = 0
find: unknown predicate `-maxdept'
+++ exited with 1 +++

$ strace -e trace=execve find -maxdept 1 -iname \*.js > /dev/null                                     
execve("/usr/bin/find", ["find", "-maxdept", "1", "-iname", "*.js"], [/* 75 vars */]) = 0
find: unknown predicate `-maxdept'
+++ exited with 1 +++

В первом случае мы видим, что * был расширен до списка файлов file1 .js и file2.js , которые присутствуют в текущем рабочем каталоге. Во втором примере - * рассматривается как буквальный аргумент для find . Фактически, это тот же результат, полученный при цитировании аргумента:

$ strace -e trace=execve find -maxdept 1 -iname '*.js' > /dev/null                                    
execve("/usr/bin/find", ["find", "-maxdept", "1", "-iname", "*.js"], [/* 75 vars */]) = 0
find: unknown predicate `-maxdept'
+++ exited with 1 +++

В качестве альтернативы вы можете вместо этого использовать восьмеричное значение * .

$ strace -e trace=execve find -maxdept 1 -iname $'\52'.js > /dev/null                                 
execve("/usr/bin/find", ["find", "-maxdept", "1", "-iname", "*.js"], [/* 75 vars */]) = 0
find: unknown predicate `-maxdept'
+++ exited with 1 +++
1
29.12.2015, 12:35
0 ответов

Теги

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