2012-05-01 25 views
8

Bu varmi nasıl değiştiririm?bash içindeki değişkenleri değiştirme

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 

Min ve max hala 0 ve 2000000'imle aynıdır. Kimse bana yardım edebilir mi? Hiç bir fikrim yok.

+0

kim önceki sorunuzu kaçırdınız, bunun için daha fazla bilgi verebilir misiniz. Ne çeşit değiştirmeye çalışıyorsun? –

+3

ayrıca "max = a", "max = $ a" olmalıdır, "min = a" olmalıdır, "min = $ a" olmalıdır –

+0

Her değer 20000000'dan büyükse "min" olmalıdır? Sanırım, 'min' ve 'max' ilk değeriniz olmalı ... –

cevap

13

Komut dosyanızla ilgili (ana) sorun, min ve max ayarlarının ana kabuğunuzda değil, alt kabuğunda gerçekleşmesidir. Bu yüzden, boru hattı yapıldıktan sonra değişiklikler görünmez.

Bir diğeri, iki kez okuyor olmanızdır - bu, diğer her satırı atlamak istiyorsanız amaçlanmış olabilir, ancak bu biraz sıra dışıdır.

Sonuncusu, min ayarının a tam anlamıyla olmasıdır. $a'a ayarlamak istiyorsunuz. (Muhtemelen) un-gerekli ikinci okuma çıkarmadan ve atamaları sabitleme, birinci sorunun kurtulmak için process substitution kullanma

, kodunuz gibi görünmelidir: bizler için

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 Teşekkürler şimdi anlıyorum. Teşekkürler :) – pkruk

+1

4. sorun: komut dosyasının ortasında, yeni başlayanlar tarafından açıklanamaz hale getirilmemiş geriye dönük backtickler. :) –

+0

@userunknown: Kodda bulunmayan, markdown editörüyle bir kavganın sonucu olduğunu varsaydım :) – Mat

İlgili konular