2012-05-01 22 views
8

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

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です。これは誰でも助けてくれますか?何も思いつきません。

+0

人あなたの前の質問を逃した、あなたはこの1つの詳細を提供できますか?あなたは何を変えようとしていますか? –

+3

また、 'max = a'は' max = $ a'でなければなりません。 'min = a'と同じ' min = $ a' –

+0

すべての値が20000000より大きい場合、私は、あなたの最初の値であるべきであると思います。... –

答えて

13

スクリプトの(主な)問題は、minmaxの設定がメインシェルではなくサブシェルで行われることです。したがって、変更はパイプラインが完了した後は表示されません。

もう1つは、2回読み上げを呼び出すことです。これは、1行おきにスキップしたい場合がありますが、それは少し珍しいことです。

最後にmin=aminからaに設定されています。 $aに設定します。 (おそらく)不必要な2回目のリードを除去し、割り当てを固定し、第一の問題を取り除くためにprocess substitutionを使用し

、あなたのコードは次のようになります。私たちの方のため

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 

+0

ahhhhありがとう、今これを理解しています。ありがとうございました:) – pkruk

+1

第4の問題:スクリプトの途中で動かされていないバッククック、初心者のミスでは説明できません。 :) –

+0

@userunknown:私はそれらがマークダウンエディタとの戦いの結果であると仮定しました。コード: – Mat