변수에 저장된 여러 줄 문자열을 반복합니다.

변수에 저장된 여러 줄 문자열을 반복합니다.

읽다이와 같이 작성하는 것은 좋지 않습니다 for line in $(command). 올바른 방법은 다음과 같습니다.

command | while IFS= read -r line; do echo $line; done

이것은 훌륭하게 작동합니다. 하지만 내가 반복하고 싶은 것이 a의 내용이라면 어떻게 될까요?바꾸다, 주문의 직접적인 결과가 아닌가요?

예를 들어 다음 파일을 생성한다고 가정합니다 quickfox.

The quick brown
foxjumps\ over -
the
lazy ,
dog.

나는 다음과 같은 일을 할 수 있기를 원합니다 :

# This is just for the example,
# I could of course stream the contents to `read`
variable=$(cat quickfox);
while IFS= read -r line < $variable; do echo $line; done; # this is incorrect

답변1

bash 및 zsh와 같은 최신 쉘에는 문자열을 입력으로 받아들이는 매우 유용한 "<<<" 리디렉터가 있습니다. 그래서 당신은 할 것입니다

while IFS= read -r line ; do echo $line; done <<< "$variable"

그렇지 않으면 언제든지 할 수 있습니다

echo "$variable" | while IFS= read -r line ; do echo $line; done

답변2

여러 행의 값을 사용하여 환경 변수를 반복하는 방법의 예:

for var in $(compgen -v | grep -Ev '^(BASH)'); do
    echo "$var=${!var}"
done

설명하다:

  1. $(compgen -v | grep -Ev '^(BASH)')- grep 환경 목록열쇠, 다음으로 끝나는 항목은 건너뛰세요.BASH
  2. echo "$var=${!var}"- 인쇄열쇠=오른쪽

관련 정보