копия bash с переменной - PullRequest
2 голосов
/ 27 мая 2010

Я пытаюсь скопировать файлы в текущий каталог, используя скрипт bash.

Для обработки путей, требующих экранирования, используется переменная, которая экранируется и затем передается команде cp.

Команда cp жалуется на:

usage: cp [-R [-H | -L | -P]] [-fi | -n] [-apvX] source_file target_file
       cp [-R [-H | -L | -P]] [-fi | -n] [-apvX] source_file ... target_directory

Я знаю, что это значит, но я не могу понять, почему это происходит.

Вот код:

z="/a/b/c d (e) f.txt"
y=`printf %q "$z"`
cp $y x.txt      # not working as expected
echo cp $y x.txt # output is "cp /a/b/c\ d\ \(e\)\ f.txt x.txt"

Ответы [ 2 ]

5 голосов
/ 27 мая 2010

Примечание. Если у вас проблемы с bash-скриптом, вы должны запустить его с параметром -x, поскольку он обеспечивает первый уровень отладки.

Неверное экранирование имени файла. Вы должны использовать:

cp "$z" x.txt
3 голосов
/ 27 мая 2010

Вы можете вообще избежать y и использовать кавычки:

cp "$z" x.txt

Это потому, что токенизация происходит после подстановки переменных. Другая возможность - изменить разделитель полей:

IFS=""  # Set special variable denoting field separator (defaults to whitespace).
cp $y x.txt  # Works as you intended.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...