次のシナリオに保存されているコマンドを適用するには:
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を使用して特別な管理が必要であることを忘れやすいです。見積もりを受け取ることは何があってもいつも厳しいです。
評価ステップ(評価要求の主な問題)なしでリダイレクトなしで変数に格納されているコマンドを実行しようとすることは依然として難しく、すべての場合には機能しません。
ここで問題の素晴らしい紹介を読んでください。
コマンドを変数に入れようとしましたが、複雑な場合は常に失敗します!