bash

2012-05-01 11 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

हम में से उन लोगों के लिए जो अपने पिछले प्रश्न को याद किया, क्या आप इस के लिए अधिक जानकारी प्रदान कर सकते हैं। आप किस बदलाव को बदलने की कोशिश कर रहे हैं? –

+3

भी 'max = a'' max = $ a' होना चाहिए, 'min = a' के साथ' min = $ a' –

+0

होना चाहिए यदि प्रत्येक मान 20000000 से अधिक हो तो 'min' क्या होना चाहिए? मुझे लगता है कि 'min' और' max' आपका पहला मान होना चाहिए ... –

उत्तर

13

आपकी स्क्रिप्ट के साथ (मुख्य) समस्या यह है कि सेटिंग min और max एक सबहेल में होती है, न कि आपके मुख्य खोल। तो पाइपलाइन के बाद परिवर्तन दिखाई नहीं दे रहे हैं।

एक और यह है कि आप दो बार पढ़ रहे हैं - इसका इरादा हो सकता है यदि आप हर दूसरी पंक्ति को छोड़ना चाहते हैं, लेकिन यह थोड़ा असामान्य है।

आखिरी बात यह है कि min=amin से a को शाब्दिक रूप से सेट करता है। आप इसे $a पर सेट करना चाहते हैं।

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

आह धन्यवाद अब मैं इसे समझता हूं। धन्यवाद :) – pkruk

+1

चौथी समस्या: स्क्रिप्ट के बीच में अप्रचलित बैकटिक्स, शुरुआती गलती से समझा नहीं जा सकता है। :) –

+0

@userunknown: मुझे लगता है कि वे मार्कडाउन संपादक के साथ एक लड़ाई का परिणाम थे, कोड में मौजूद नहीं :) – Mat

 संबंधित मुद्दे