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

관련 정보