2012-02-25 4 views
1

복합 연산자와 관련된 다음 bash 코드가 예상대로 작동하지 않는 이유는 누구나 설명 할 수 있습니까? 기본적으로, 아무것도 for 루프 안에 if 문을 입력하지하지만 난 그것을 실행하여 뭔가를 반환해야 올바른 매개 변수를 전달하고있다 : ./my_bash_script 20,100,101 20,120,101bash에서의 화합물 비교

dates.txt 2000

#!/bin/bash 

old_IFS=$IFS 
IFS=$'\n' 
lines=($(cat dates.txt)) # array 
IFS=$old_IFS 

for ((i=1; i<${#lines[@]}; i++)) 
do 
    if [[ ${line[$i]} -ge $1 && ${line[$i]} -le $2 ]]; then 
     echo 0 > ${line[$i]} # redirect to file 
     echo ${line[$i]} 
    fi 
done 
이후의 모든 일의 목록을

답변

2

lines이라는 배열을 선언했지만 그 배열에 line이라는 이름으로 액세스하려고하면 문제가 발생합니다. ${line[$i]} 번을 ${lines[$i]} 번으로 변경해야합니다.

더 나은 아직, 당신을위한 루프 산술 생략하고 작성할 수있게된다

for line in "${lines[@]}" ; do 

당신이 $line 또는 "$line"보다는 ${lines[$i]} 등으로 라인을 참조하십시오.

I 라인의 버그 수정

+0

(?. 당신은 논리가 $IFS을 수정하는 것을 가지고 와서 어떻게 방법에 의해 기본값 그냥 잘 작동 것 같다) -> 라인을 지금 코드 작품 오타가 문제라는 것을 알았습니다. 감사합니다. – user788171

+1

@ user788171 : 환영합니다! 그러나 나는 여전히 당신이 보통의 for 루프를 사용해야한다고 생각한다. – ruakh