これは私にとって効果的です。
CMD="ls -la"
$CMD
常に失敗しますが:
CMD="sed -e 's|abc|abc|g' file"
$CMD
エラーメッセージが表示されます。
sed: -e expression #1, char 1: unknown command: `''
答え1
これは、コマンドラインにコマンドを入力すると、シェルがそのコマンドに対して「拡張」を実行するためです。最後のステップは「引用符の削除」ですが、拡張の結果ではなく引用符のみを削除します。 (望むより拡大するman bash
) ここで引用符は変数拡張の一部なので削除されません。
引用符なしで代替単語を入力して機能させることができます。
cmd='sed -e s|abc|abc|g file'
$cmd