なぜこれをしましたか:
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