Я пытаюсь скопировать несколько файлов в каталог из шеллскрипта. Эти файлы содержат всевозможные "уродливые" символы, такие как пробелы, скобки и все, что не иначе. Тем не менее, я застрял, когда дело доходит до экранирования, поскольку bash
и cp
кажется, обрабатывают это очень странно.
Вот сценарий:
При выдаче этой команды из моей оболочки она работает как шарм:
cp /somedir/a\ file.png /somedir/another\ file.png /someotherdir/
Однако при чтении файлов для копирования из строки это неожиданно становится странным:
var="/somedir/a\ file.png /somedir/another\ file.png"
cp "$var" /someotherdir/
Результаты в cp: cannot stat 'a\\ file.png another\\ file.png': No such file or directory
Я полагаю, что это связано с тем, что я даю переменную в виде строки, а cp
считает, что это один файл, хотя это несколько файлов. При вводе той же команды без помещения переменной в кавычки (var="/somedir/a\ file.png /somedir/another\ file.png"; cp $var /someotherdir/
) я получаю еще более странную ошибку:
cp: cannot stat 'a\\ file.png another\\ file.png': No such file or directory
cp: cannot stat 'file.png': No such file or directory
cp: cannot stat 'another\\': No such file or directory
cp: cannot stat 'file.png': No such file or directory
Кажется, это полностью игнорирует мое спасение. Что я делаю неправильно?
РЕДАКТИРОВАТЬ:// Кажется, что список копирования файлов имеет ответ с xargs
, но я все еще удивляюсь, почему bash действует так странно здесь.