私はシェル スクリプトを作成しており、curl コマンドは次のような変数に格納されています。
str="curl 'http...'"
そして、私はこれを使用して評価しています
評価 $str
これの出力がnullかどうかを確認したいのですが、それは何かを返しているかどうかを意味します.どうすればこれを確認できますか? 次のような変数に出力を格納できないのはなぜですか。
op=eval $str これを書くとエラーになるのはなぜですか? 前もって感謝します
私はシェル スクリプトを作成しており、curl コマンドは次のような変数に格納されています。
str="curl 'http...'"
そして、私はこれを使用して評価しています
評価 $str
これの出力がnullかどうかを確認したいのですが、それは何かを返しているかどうかを意味します.どうすればこれを確認できますか? 次のような変数に出力を格納できないのはなぜですか。
op=eval $str これを書くとエラーになるのはなぜですか? 前もって感謝します
コマンド置換を使用します。
str="curl 'http...'"
op=$(eval "$str")
if [[ -n $op ]]; then
echo "Output is not null."
else
echo "Output is null.
fi
実際に eval を使用する代わりに、より安全な配列を使用することをお勧めします。
cmd=("curl" "http://...")
op=$("${cmd[@]}")
if [[ -n $op ]]; then
echo "Output is not null."
else
echo "Output is null.
fi
配列を割り当てるときは、すべての引数を 1 つの要素として区切ります。引数を 1 つの完全な引数として保持するために引用符が必要な場合は、一重引用符または二重引用符を使用するかどうかにかかわらず、任意の引用方法を選択できます。
ちなみに、出力を取得するコマンドを呼び出す適切な方法ではなかったため、単にエラーが発生しました。説明したように、コマンド置換を使用する必要があります。プロセス代替と呼ばれる高度な方法も適用できますが、要件には実用的ではありません。