for 루프 조건 내에서는 명령 대체가 작동하지 않습니다.

for 루프 조건 내에서는 명령 대체가 작동하지 않습니다.

for (( a=1;a<=$(wc -l sedtest1);a++ ));do echo $a; done

나에게 오류가 발생합니다 :

-bash: ((: a<=21 sedtest1: syntax error in expression (error token is "sedtest1")

답변1

의 출력은 wc -l sedtest1다음과 유사합니다.

21 sedtest1

a <= 21 sedtest1그러면 그 시험은 그렇게 무효한 것이 될 것입니다 .

또한 이는 wc루프가 반복될 때마다 명령이 실행된다는 의미입니다. 각 반복 사이에 파일 내용이 sedtest1변경되지 않으면 먼저 루프 외부의 변수에 줄 번호를 저장하는 것이 좋습니다.

n=$(wc -l < sedtest1) # using redirection avoids the output containing the filename
for ((a = 0; a < n; a++)); do echo "$a"; done

나는 또한 당신이 루프를 사용하여 비효율적이고 쉘이 아닌 방식으로 텍스트를 처리하려고 시도하고 있다고 의심합니다. 당신은 읽고 싶을 수도 있습니다쉘 루프를 사용하여 텍스트를 처리하는 것이 왜 나쁜 습관으로 간주됩니까?. 이런 식으로 파일의 각 줄을 반복하는 것은 올바른 접근 방식이 아닙니다.

답변2

괜찮아요, 제가 정말 멍청해서요... wc -l file출력은 "x 파일"입니다.

내가 해야 할 일은 이것이다: for (( a=1;a<=$(wc -l sedtest1|awk '{print $1}');a++ ));do echo $a; done

관련 정보