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

最初のループは配列のメンバーを繰り返し、2番目のループはスペースで区切られた文字列を繰り返します。 2番目のループが最初のループと同じ出力を生成するには、それを配列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

おすすめ記事