1

私はシェル スクリプトを作成しており、curl コマンドは次のような変数に格納されています。

str="curl 'http...'"

そして、私はこれを使用して評価しています

評価 $str

これの出力がnullかどうかを確認したいのですが、それは何かを返しているかどうかを意味します.どうすればこれを確認できますか? 次のような変数に出力を格納できないのはなぜですか。

op=eval $str これを書くとエラーになるのはなぜですか? 前もって感謝します

4

1 に答える 1

1

コマンド置換を使用します。

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 つの完全な引数として保持するために引用符が必要な場合は、一重引用符または二重引用符を使用するかどうかにかかわらず、任意の引用方法を選択できます。

ちなみに、出力を取得するコマンドを呼び出す適切な方法ではなかったため、単にエラーが発生しました。説明したように、コマンド置換を使用する必要があります。プロセス代替と呼ばれる高度な方法も適用できますが、要件には実用的ではありません。

于 2013-09-23T04:19:43.767 に答える