web-dev-qa-db-ja.com

文字列のリストをBashで反復処理する

私はこのbashスクリプトを持っています:

for opt in string1 string2 string3 ... string99
do somestuff

それは機能しますが、文字列の明示的なリストを実際にすべての文字列を含むファイルに置き換えたいと思います。このようなもの:

strings=loadFromFile
for opt in $strings
do somestuff

どうすればよいですか?

6
michelemarcon

while read VARは行ごとの入力を処理するため、おそらくここが最適です。ファイルからリダイレクトできます。例:

while IFS= read -r THELINE; do
  echo "..$THELINE"
done </path/to/file

これにより、各行の先頭に「..」が追加されます。

あなたの例の場合:

while IFS= read -r opt; do
  #somestuff $opt
done </path/to/file

「IFS =の代わりに、「IFS =読み取り中」が頻繁に使用される理由を参照してください。読みながら..`? 説明。

10
IBBoard
7
rush

_while IFS= read -r line; do ...; done < aFile_が最良の答えです

文字列がnotに空白または_\[*?_を含む場合、次のようにすることができます

_for Word in $(< aFile); do something; done
_

$(< file)は、ファイルを読み取るbash機能です(catと同じですが、新しいプロセスを生成する必要がない点が異なります)。

4
glenn jackman

組み込みのreadarrayを使用しないのはなぜですか(bash >= 4.0が必要)。

readarray < FileNameFromWhereToLoad    # Push every line of 
                                       # 'FileNameFromWhereToLoad' onto 
                                       # $MAPFILE by default

for i in $MAPFILE ; do
    echo $i
done
2
user1146332

私のアドバイス:

cat INPUTFILE| {
  declare -a LINES
  mapfile -t LINES
  for line in "${LINES[@]}"
  do
    somestuff
  done
}
1
H.-Dirk Schmitt