26

この変数を変更するにはどうすればよいですか?

max=0;
min=20000000;
cat |while read
do
    read a
    if [[ $a -gt $max ]]
    then
        max=a`
    fi
    `if [[ $a -lt $min ]]
    then
        min=a
    fi
done
echo $max 
echo $min

私の最小値と最大値は同じで、0と2000000です。誰かがこれを手伝ってくれますか?何も思いつきません。

4

1 に答える 1

38

スクリプトの(主な)問題は、その設定minでありmax、メインシェルではなくサブシェルで発生します。そのため、パイプラインが完了した後、変更は表示されません。

もう 1 つは、read を 2 回呼び出していることです。これは、1 行おきにスキップしたい場合に意図されている可能性がありますが、これは少し珍しいことです。

最後の 1 つは、文字通りにmin=a設定minされます。aに設定し$aます。

プロセス置換を使用して最初の問題を取り除き、(おそらく) 不要な 2 番目の読み取りを削除し、割り当てを修正すると、コードは次のようになります。

max=0
min=20000000
while read a
do
    if [[ $a -gt $max ]]
    then
        max=$a
    fi
    if [[ $a -lt $min ]]
    then
        min=$a
    fi
done < <(cat)    # careful with the syntax
echo $max 
echo $min

于 2012-05-01T18:56:42.857 に答える