명령 대체 문자열이 포함된 Bash 'while' 읽기 루프가 전체 입력을 읽지 않는 이유는 무엇입니까?

명령 대체 문자열이 포함된 Bash 'while' 읽기 루프가 전체 입력을 읽지 않는 이유는 무엇입니까?

매우 기본적인 Bash 스크립트를 살펴보십시오.

#!/bin/bash
while read l
do
  echo $l
  echo "next one"
done <<< $(ps aux)

내 컴퓨터에 여러 프로세스가 있고 ps aux명령이 터미널에서 제대로 실행됩니다.

나는 단지 얻는다하나루프 내의 반복과 ps명령 출력은 같은 줄에 제공됩니다. 예상대로 작동하지 않는 이유는 무엇입니까?

답변1

bash< 버전 에서는 4.4-beta큰따옴표를 추가해야 합니다.

#!/bin/bash
while read l
do
  echo $l
  echo "next one"
done <<< "$(ps aux)"

바라보다:


일반적으로 프로세스 대체를 사용하는 것이 더 좋다고 생각합니다.

#!/bin/bash
while read l
do
  echo $l
  echo "next one"
done < <(ps aux)

(문제를 피하기 위해,당신은 사용하고 싶을 수도 있습니다IFS=).

또는 더 나은 방법은 awk.

ps aux | awk '{print $0; print "next one"}'

관련 정보