Zsh는 이상한 행동을 인용합니다.

Zsh는 이상한 행동을 인용합니다.

왜이 짓을 했나요:

for i in 0 foo 1 'bar t ttt' 2 baz 3 '   ' 4 'qux ' 5 ''; do echo $i; done

(다음으로 이어짐:

0
foo
1
bar t ttt
2
baz
3

4
qux 
5

)

같지 않음:

a="0 foo 1 'bar t ttt' 2 baz 3 '   ' 4 'qux ' 5 ''"
for i in `echo $a`; do echo $i; done

이것은 만든다:

0
foo
1
'bar
t
ttt'
2
baz
3
'
'
4
'qux
'
5
''

?

답변1

첫 번째 루프는 배열의 멤버를 반복하고, 두 번째 루프는 공백으로 분할된 문자열을 반복합니다. 두 번째 루프가 첫 번째 루프와 동일한 출력을 생성하도록 하려면 이를 a배열로 선언해야 합니다.

a=( 0 foo 1 'bar t ttt' 2 baz 3 '   ' 4 'qux ' 5 '' )
for i in $a; do echo $i; done

또는 문자열로 제한되는 경우 공백 대신 셸 단어로 분할하고 작은따옴표를 제거해야 합니다.

a="0 foo 1 'bar t ttt' 2 baz 3 '   ' 4 'qux ' 5 ''"
for i in ${(Q)${(z)a}}; do echo $i; done

관련 정보