変数からコマンドを実行すると、sedでは機能しません

変数からコマンドを実行すると、sedでは機能しません

これは私にとって効果的です。

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

関連情報