変数に格納されたコマンドを実行してファイルにエコー

変数に格納されたコマンドを実行してファイルにエコー

次のシナリオに保存されているコマンドを適用するには:

CMD='echo "test" >> test.txt'
$CMD

次のような他のシナリオに適しています。

CMD='mkdir test'
$CMD

答え1

正しい規則は次のとおりです。

  • 変数にデータを保存し、関数にコードを保存します。

したがって、このコマンドを操作する正しい方法は次のとおりです。関数を生成します。

first_command (){ echo "test" >> test.txt; }

次の関数を呼び出します。

first_command

それはすべてです。


コマンドを文字列として保存するのは間違っています。
均一悪いこれらのコマンドを実行するには、evalを使用します。

単純なコマンドでは動作しているように見えますが、隠された問題は、評価フェーズでコマンドへの参照が削除されることです。

このコマンドを保存すると

CMD='echo "test" >> test.txt'

(例えばeval "$CMD"、引用符まで)は、次のコマンドを実行します。

echo test >> test.txt

引用符はありません!

これは非常に引用文はevalを使用して特別な管理が必要であることを忘れやすいです。見積もりを受け取ることは何があってもいつも厳しいです。

評価ステップ(評価要求の主な問題)なしでリダイレクトなしで変数に格納されているコマンドを実行しようとすることは依然として難しく、すべての場合には機能しません。

ここで問題の素晴らしい紹介を読んでください。
コマンドを変数に入れようとしましたが、複雑な場合は常に失敗します!

関連情報