이것을 실행하면:
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