Выполнить команду, сохраненную в переменной $

Я создал сценарий, где я писал:

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"

Но такая же ошибка вывода. Любая идея решить проблему? спасибо.

1
задан 26 April 2016 в 21:40

2 ответа

Для более подробных объяснений о том, как Bash интерпретирует пробелы, я рекомендую прочитать следующее: переменные Bash и подстановка команд

Чистое решение

Расширение переменной может привести к неожиданным, а иногда и катастрофическим если переменная содержит специальные символы:

user@host:~$ do_something $some_variable

Расширение переменной в двойных кавычках может предотвратить такие проблемы:

user@host:~$ do_something "$some_variable"

Очистить решение [ ! d6]

Случай, встречающийся здесь, описан в конце сообщения:

Опасности некотируемых переменных В идеальном мире каждый будет хранить свои строковые значения короткими и без пробела / новой строки или любые другие специальные символы. [...] Но когда люди начинают добавлять специальные символы к именам файлов, такие как пробелы, расширяющие переменные без использования двойных кавычек, могут быть опасными. [...] Таким образом, основной вывод здесь: двойное цитирование ссылок на переменные, когда это возможно.
0
ответ дан 23 May 2018 в 11:44

точка glenn jackman хорошо взята. Но, чтобы решить ваш случай использования, как насчет обратных сигналов? Например:

`echo $COMMAND`

Например, это работает:

COMMAND='ls /'
`echo $COMMAND`
-1
ответ дан 23 May 2018 в 11:44
  • 1
    -1 Почему `echo $COMMAND`, а не только $COMMAND? Они имеют одинаковый эффект (за исключением некоторых угловых случаев, в которых вариант echo имеет больше). – David Foerster 27 April 2016 в 00:01

Другие вопросы по тегам:

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