문자열 항목을 통해 새 줄을 반복합니다.

문자열 항목을 통해 새 줄을 반복합니다.

이것을 실행하면:

abc="one
two
three"
for item in "$abc"; do echo "Item: $item"; done

나는 얻다:

item: one
two
three

하지만 내가 기대하는 것은 다음과 같습니다.

Item: one
Item: two
Item: three

내가 뭘 잘못했나요?

답변1

변수를 참조로 전달합니다. 즉, 단일 인수로 처리됩니다. 따옴표를 넣지 않은 채로 두면 예상한 결과를 얻을 수 있습니다(참고이로 인해 다양한 다른 문제가 발생할 수 있습니다.):

$ for item in $abc; do echo "Item: $item"; done
Item: one
Item: two
Item: three

그런데 원하는 것은 값 목록뿐인데 왜 문자열을 사용합니까? 이것이 배열의 용도입니다(bash를 사용한다고 가정).

$ abc=(one two three)
$ for item in "${abc[@]}"; do echo "Item: $item"; done
Item: one
Item: two
Item: three

또는 배열을 이해하는 셸을 사용하지 않는 경우 다음을 수행하세요.

$ abc="one           
two
three"
$ printf '%s\n' "$abc" | while read -r item; do echo "Item: $item"; done
Item: one
Item: two
Item: three

답변2

그냥 삭제하세요""변수 $abc가 보유하는 내용을 확장합니다. 큰따옴표는 공백의 새 줄을 제거합니다.

$ abc="one                                     
two
three"


$ for item in $abc; do echo "Item: $item"; done
Item: one
Item: two
Item: three

관련 정보