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

为什么如此频繁地使用“while IFS= read”,而不是“IFS=;”在阅读时..`?以获得解释。

答案2

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

为什么如此频繁地使用“while IFS= read”,而不是“IFS=;”在阅读时..`?以获得解释。

答案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
}

相关内容