2017-02-05 1 views
1

배열의 값을 업데이트하는 while 루프를 빌드하려고하는데 명령을 찾을 수없는 오류가 계속 발생합니다.단일 라인 while 루프 업데이트 배열

i=1 
bool=true 
declare -a LFT 
declare -a RGT 
while read -r line; do 
    ${LFT[$i]}=${line:0:1}; ${RGT[$i]}=$(wc -l < temp$i.txt); 
    if [ ${LFT[$i]} -ne ${RGT[$i]} ]; then 
    $bool=false; 
    fi; 
    ((i=i+1)); 
done<output2.txt 

내가 읽는 오전 파일은 각 행에 하나의 숫자를 포함, 나는 각 항목은 자리 인 상태 배열 LFT를 채우려. 배열 RGT는 temp * .txt로 표시된 파일의 줄 수로 채워야합니다. 그리고이 두 배열의 각 항목이 같은지 테스트하려고합니다.

그러나 오류가 계속 발생합니다. command = # not found, 여기서 #는 파일의 줄에있는 숫자입니다. 배열에 값을 잘못 할당하고 있습니까? 또한 오류가 발생합니다. command true = false not found. 나는 이것이 부울에 값을 할당하는 것과 관련이 있다고 가정하고있다.

${LFT[$i]}=${line:0:1}; ${RGT[$i]}=$(wc -l < temp$i.txt); 

변경 그것에 : 문제는이 라인에 감사

답변

1

LFT[$i]=${line:0:1}; RGT[$i]=$(wc -l < temp$i.txt); 
쉘에서

유효한 할당해야한다 :

var=<expression> 

보다는

$var=<expression> ## this will be interpreted by the shell as a command 

이것은 Bash 프로그래머가 자주 범하는 실수 중 하나입니다. 더 Bash pitfalls 여기에.

+1

와우, 그렇게 간단한 수정이었습니다. 감사합니다. –

+0

문제가있는 곳을 찾아내는 디버깅 방법이 있습니까? 아니면 경험을 통해 알고 계십니까? –

+0

이러한 것들 중 일부는 연습과 함께 제공됩니다. 그러나 http://www.shellcheck.net/을 통해 코드를 전달할 수 있습니다. 훌륭한 도구입니다. 그리고 SO는 배쉬에 관해 배울 수있는 훌륭한 장소입니다. – codeforester