나읽다이와 같이 작성하는 것은 좋지 않습니다 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
설명하다:
$(compgen -v | grep -Ev '^(BASH)')
- grep 환경 목록열쇠, 다음으로 끝나는 항목은 건너뛰세요.BASH
echo "$var=${!var}"
- 인쇄열쇠=값오른쪽