私はこのbashスクリプトを持っています:
for opt in string1 string2 string3 ... string99
do somestuff
それは機能しますが、文字列の明示的なリストを実際にすべての文字列を含むファイルに置き換えたいと思います。このようなもの:
strings=loadFromFile
for opt in $strings
do somestuff
どうすればよいですか?
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
while IFS= read -r opt
do
some_stuff
done < file_with_string
_while IFS= read -r line; do ...; done < aFile
_が最良の答えです
文字列がnotに空白または_\[*?
_を含む場合、次のようにすることができます
_for Word in $(< aFile); do something; done
_
$(< file)
は、ファイルを読み取るbash機能です(cat
と同じですが、新しいプロセスを生成する必要がない点が異なります)。
組み込みのreadarray
を使用しないのはなぜですか(bash >= 4.0
が必要)。
readarray < FileNameFromWhereToLoad # Push every line of
# 'FileNameFromWhereToLoad' onto
# $MAPFILE by default
for i in $MAPFILE ; do
echo $i
done
私のアドバイス:
cat INPUTFILE| {
declare -a LINES
mapfile -t LINES
for line in "${LINES[@]}"
do
somestuff
done
}