кавычки bash в переменной обрабатываются по-разному при расширении до команды
Объясняя вопрос на примерах ...
Демонстрирует, что одинарные кавычки после --chapters будут экранированы при раскрытии переменной (я этого не ожидал):
prompt@ubuntu:/my/scripts$ cat test1.sh
#!/bin/bash
actions="--tags all:"
actions+=" --chapters ''"
mkvpropedit "$1" $actions
prompt@ubuntu:/my/scripts$ ./test1.sh some.mkv
Error: Could not open '''' for reading.
И теперь по какой-то причине mkvpropedit получает двойные кавычки как часть имени файла (я тоже этого не ожидал):
prompt@ubuntu:/my/scripts$ cat test1x.sh
#!/bin/bash
command="mkvpropedit \"$1\""
command+=" --tags all:"
command+=" --chapters ''"
echo "$command"
$command
prompt@ubuntu:/my/scripts$ ./test1x.sh some.mkv
mkvpropedit "some.mkv" --tags all: --chapters ''
Error: Could not open '''' for reading.
Вышеприведенная команда echo'd кажется правильной. Помещение того же текста в другой скрипт дает ожидаемый результат:
prompt@ubuntu:/my/scripts$ cat test2.sh
#!/bin/bash
mkvpropedit "$1" --tags all: --chapters ''
prompt@ubuntu:/my/scripts$ ./test2.sh some.mkv
The file is being analyzed.
The changes are written to the file.
Done.
Может ли кто-нибудь объяснить, почему цитаты не ведут себя, как ожидалось. Поиск по этому вопросу мне показался сложным, так как в Интернете так много других дискуссий по цитированию. Я бы даже не знал, как объяснить вопрос без примеров.
Я боюсь, что когда-нибудь имя файла в аргументе будет содержать какой-то символ, который нарушает все, что может привести к чрезмерному цитированию. Я не понимаю, почему одна и та же команда выполняется по-разному при вводе непосредственно в сценарии или при предоставлении через переменную. Пожалуйста, просветите меня.
Спасибо за чтение.