web-dev-qa-db-ja.com

文字列のリストを通るbashループ

このサンプルをフォーマットすることは可能ですか?

for i in string1 string2 stringN
do
 echo $i
done

これに似たものに:

for i in 
string1
string2
stringN
do
 echo $i
done

編集:混乱を招いて申し訳ありませんが、スクリプトを実行するさまざまな方法があることに気付きませんでした-sh <scriptname>bash <scriptname>と、今は名前を付けられないこのこと-#!/bin/shおよび#!/bin/bash :)

12
user296353

Bashで配列を使用すると、読みやすくなります。この配列構文では、単語間に任意の空白を使用できます。

strings=(
    string1
    string2
    "string with spaces"
    stringN
)
for i in "${strings[@]}"; do
    echo "$i"
done
31
glenn jackman

バックスラッシュで改行をエスケープできます:

$ for i in \
> hello \
> world
> do
> echo $i
> done
hello
world
$
4
Andy Dalton

ループする各項目の前後で改行をエスケープできます。

for i in \
    string1 \
    string2 \
    stringN
do
   printf '%s\n' "$i"
done

または、この単純な例の場合:

printf '%s\n' string1 string2 stringN

同じ結果になります。

関連:

bash配列を使用したバリエーション:

strings=(
    string1
    string2
    stringN
)

printf '%s\n' "${strings[@]}"
2
Kusalananda

zshへの切り替えがオプションの場合:

for string (
  string1
  'other string'
  etc..
) printf '%s\n' "$string"
1

同じこと、少ないテキスト:

array=(
        string{1..7}
)

for i in "${array[@]}"; do
    echo "$i"
done
0

次のように、loopコマンドを使用できます here

$ loop "echo $ITEM" --for string1,string2,string3

または、ファイルとしてリストがある場合:

$ cat file_list.txt | loop "echo $ITEM"
0
Rich Jones
list='a b c d'
for element in $list;do 
    echo "$element"
done
0
guest