例を使って質問を説明します...
変数が展開されたときに --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.
上記のエコーされたコマンドは正しいようです。同じテキストを別のスクリプトに入れると、期待される結果が得られます。
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.
引用符が期待どおりに動作しない理由を誰か説明してください。ウェブ上には他にも多くの引用に関する議論があるため、この問題を検索するのは困難であることがわかりました. 例がなければ、質問を説明する方法さえわかりません。
いつの日か、引数のファイル名にすべてを壊す文字が含まれているのではないかと心配しています。スクリプトに直接入力した場合と、変数を介して指定した場合とで、同じコマンドの実行が異なる理由がわかりません。教えてください。
読んでくれてありがとう。