変数があります。
❯ 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"
。どうすればいいですか?
答え1
zshから改行に分割するには、次のものを使用できます。f
パラメータ拡張フラグ(f
のためラインf
需要)は次の略語ですps:\n:
。
for num (${(f)numholds}) print -r New item: $num
-splittingを使用することもできます$IFS
。ここではzsh
(他のBourne様シェルとは異なり)使用する必要があります。$=param
通事論($=
はさみのように見えました):
for num ($=numholds) print -r New item: $num
答え2
変数は配列ではなく文字列です。改行文字が含まれていることは関係ありません。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
これは本質的に見苦しい結果をもたらします(参照:こここれが悪い考えである理由):
% 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%