Я пишу сценарий bash, который использует другие входные данные для создания набора сложных аргументов для команды. Пока что скрипт отлично работает с этой техникой:
whatIwant="command \"$filename-with-spaces-maybe\" -opt1 \"$some_words\" -opt2 $a_number -opt3 \"$a_file_reference\" -opt4 \"$several_sentences\" "
eval $whatIwant
Хотя это работает, я опасаюсь использовать eval
из-за риска того, что неправильное имя файла нанесет ущерб. Я хотел бы иметь возможность пропустить назначение переменной, а затем ее оценку, вместо того, чтобы просто поместить команду в начало строки и установить все аргументы соответствующими переменными, которые я создал ранее в сценарии.
Однако, когда я пытаюсь это сделать, имена файлов не рассматриваются как отдельные переменные, а вместо этого передаются команде в виде нескольких аргументов. Я пробовал несколько форм двойного экранирования, но мне не удалось найти что-то, что правильно оценивается. Это расстраивает, потому что, когда я возвращаю свою переменную, в которую я встраиваю команду, она идеально копирует и вставляет в командную строку и делает то, что я хочу.
Как лучше всего это сделать в сценарии bash?
command
— это имя фактической встроенной команды, что делает его плохим именем для использования в качестве заполнителя/примера. - person Charles Duffy   schedule 08.07.2017