2012-05-01 3 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'와 동일해야합니다. –

+0

모든 값이 20000000보다 큰 경우 'min'이어야합니까? 나는 '최소'와 '최대'가 첫 번째 가치가되어야한다고 생각합니다 ... –

답변

13

스크립트에서 (주된) 문제점은 minmax 설정이 주 쉘이 아닌 서브 쉘에서 발생한다는 것입니다. 따라서 파이프 라인이 완료되면 변경 사항이 표시되지 않습니다.

또 다른 한 가지는 당신이 두 번 읽는 것입니다. 이것은 다른 모든 행을 건너 뛰기를 원할 수도 있지만 약간 특이합니다.

마지막으로 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

ahhhh 고마워, 이제 이걸 이해해. 고마워요 :) – pkruk

+1

네 번째 문제 : 스크립트의 중간에 움직이지 않는 backticks, 초보자 실수로 설명 할 수 없습니다. :) –

+0

@userunknown : 나는 코드에 존재하지 않는 markdown 편집기와의 싸움 결과라고 생각했습니다. – Mat