Я создал сценарий, где я писал:
COMMAND="/usr/bin/exiftool $PATH_NAME" .... code .... $COMMANDПеременная $ PATH_NAME назначается динамически внутри цикла while. Команда отлично работает, пока не встретит файлы с пробелами (например, PATH_NAME = «Добавить драйвер.png»). Вывод на консоль:
File not found: ./Add File not found: driver.pngКоманда должна быть:
/usr/bin/exiftool ./Add driver.pngЯ думаю, что проблема задается пробелами в $ PATH_NAME. Я также попытался выполнить непосредственно команду:
eval "/usr/bin/exiftool $PATH_NAME"Но такая же ошибка вывода. Любая идея решить проблему? спасибо.
Для более подробных объяснений о том, как Bash интерпретирует пробелы, я рекомендую прочитать следующее: переменные Bash и подстановка команд
Чистое решение
Расширение переменной может привести к неожиданным, а иногда и катастрофическим если переменная содержит специальные символы:
user@host:~$ do_something $some_variable
Расширение переменной в двойных кавычках может предотвратить такие проблемы:
user@host:~$ do_something "$some_variable"
Очистить решение [ ! d6]
Случай, встречающийся здесь, описан в конце сообщения:
Опасности некотируемых переменных В идеальном мире каждый будет хранить свои строковые значения короткими и без пробела / новой строки или любые другие специальные символы. [...] Но когда люди начинают добавлять специальные символы к именам файлов, такие как пробелы, расширяющие переменные без использования двойных кавычек, могут быть опасными. [...] Таким образом, основной вывод здесь: двойное цитирование ссылок на переменные, когда это возможно.точка glenn jackman хорошо взята. Но, чтобы решить ваш случай использования, как насчет обратных сигналов? Например:
`echo $COMMAND`
Например, это работает:
COMMAND='ls /'
`echo $COMMAND`