変数があります:
❯ echo $numholds
409503
409929
409930
409932
409934
409936
409941
409942
409944
409946
Forループを実行したいのですが、改行区切りが機能しません。
❯ for num in $numholds; do
echo $num ,
echo New Item!
> done
409503
409929
409930
409932
409934
409936
409941
409942
409944
409946 ,
New Item!
これは、IFS=$"\n \t"
。どうすればこれを機能させることができますか?
Zshの改行で分割するには、f
パラメータ展開フラグ (f
forline f
eedを使用します。 )ps:\n:
の略:
for num (${(f)numholds}) print -r New item: $num
$IFS
- splittingを使用することもできます。これは、zsh
で(他のBourneのようなシェルとは異なり)、 $=param
構文を使用して明示的にパラメータ拡張を要求する必要があります ($=
は、はさみのペアのように見えます):
for num ($=numholds) print -r New item: $num
変数は配列ではなく文字列です。改行が含まれていることは関係ありません。 for num in $numholds
は、格納されている方法であるため、全体を単一の値として認識します。
簡単な回避策は、while
ループと<<<
here-stringコンストラクトを使用してフィードすることです。
% while read num; do echo "$num"; echo "New Item"; done <<<"$numholds"
409503
New Item
409929
New Item
409930
New Item
409932
New Item
409934
New Item
409936
New Item
409941
New Item
409942
New Item
409944
New Item
409946
New Item
これは基本的に醜いものと同等です(なぜこれが悪い考えであるかについては here を参照してください):
% for num in $(echo "$numholds"); do echo $num; echo "new item"; done
409503
new item
409929
new item
409930
new item
409932
new item
409934
new item
409936
new item
409941
new item
409942
new item
409944
new item
409946
new item
最後に、代わりに変数を配列にすることができます。
numArray=($(echo "$numholds"))
これで、必要な構成を使用できます。
% for num in "${numArray[@]}"; do echo $num; echo "new item"; done
409503
new item
409929
new item
409930
new item
409932
new item
409934
new item
409936
new item
409941
new item
409942
new item
409944
new item
409946
new item
tpad%