Bashは文字列のリストを繰り返します。

Bashは文字列のリストを繰り返します。

このbashスクリプトがあります。

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

うまくいきますが、明示的な文字列のリストを実際に次のすべての文字列を含むファイルに置き換えたいと思います。

strings=loadFromFile
for opt in $strings
do somestuff

どうすればいいですか?

答え1

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 = Read」が頻繁に使用されるのはなぜですか?説明のために。

答え2

while IFS= read -r opt
do 
    some_stuff
done < file_with_string

バラより"IFS=;"代わりに「IFS = Read」が頻繁に使用されるのはなぜですか?説明のために。

答え3

これがwhile IFS= read -r line; do ...; done < aFile最善の答えです

文字列にいいえまたはスペースを含めること\[*?ができます

for word in $(< aFile); do something; done

$(< file)ファイルを読み取るbashの機能です(に似ていますcatが、新しいプロセスを作成しません)。

答え4

私のアドバイス:

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

関連情報