왜이 짓을 했나요:
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