Bash:各リスト項目を新しい行で宣言することは可能ですか?


1

例:通常、水平レイアウトで値をリストします

for var in 0 1 2 3 4 5 6 7 8 9 do echo $var done

バージョン管理と読みやすさの目的のために、各リスト項目を独自の行に入力するとよいでしょう。これは可能ですか?

次のことはできません/r/n

for var in 0 1 2 3 4 5 6
7 8 9 do echo $var done

興味深いことに、これはほとんど機能します(一重引用符または二重引用符に関係なく)。

for var in '0 1 2 3 4 5 6 7 8 9' do echo $var done

出力:

-bash: demo.sh: line 11: syntax error near unexpected token ` '0 1 2 3 4 5 6 7 8 9'' -bash: demo.sh: line 11: ` 9''

これは、一重引用符または二重引用符に関係なく機能しませ

for var in "0" "1" "2" "3" "4" "5" "6" "7" "8" "9" do echo $var done

回答:


1

このテスト済みバージョンを試してください:

#!/bin/bash --
for var in  \
1 \
2 \
3 \
4 \
6 \
 ; do
  printf "%s\n" "${var}"
done

forデフォルトでは、ループは(スペース)を含む文字列を\n個別の要素に分割します。

'forループで使用されると、(バージョンの)シェルに、パラメータを1つの値、つまり複数の行を含む文字列と見なすよう指示します。

テスト:

$ ./list.sh
1
2
3
4
6

参考のための最初のバージョン:

#!/bin/bash --
listint='
1
2
3
4
6
'

for var in ${listint} ; do
  printf "%s\n" "${var}"
done

'含む複数の線、上の文字列を定義できます\n


ねえ、それは働いた!これを可能にするために何が起こっているのかを少し詳しく説明していただけますか?
ケビンサトル

1
@KevinSuttle上の例は、ご使用のバージョンに非常に近いもので更新されていました。
ジェイジャーゴ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.