繁体   English   中英

如何从多行文件中读取变量?

[英]How to read in variables from multi-line file?

我正在尝试从多行且每行具有多个变量的文件中读取。 有四个变量:项目,价格,max_qty和min_qty。 该文件如下所示:

item price
min_qty max_qty

我努力了:

while IFS=' ' read -r first second third fourth; do
    echo "$first $second $third $fourth
done

这是行不通的。 我希望输出为:

item price min_qty max_qty

我还考虑过用空格替换新行,然后从该行读取内容。 我不想实际更改文件。

read两次:

while read -r first second && read -r third fourth; do 
  echo "$first $second $third $fourth"
done < file

如果确实是“文件看起来像这样”(两行,每行两个值,而不是像这样具有多对行的更大文件),则可以通过使用-d选项进行一次read来做到这一点将行定界符设置为空:

read -r -d '' first second third fourth <file
echo "$first $second $third $fourth"
  • 该代码在示例文件中显示“ item price min_qty max_qty”。
  • 如果设置了errexitERR陷阱,则在执行read后,程序将立即安静地退出。 有关避免特定命令的方法,请参见Bash忽略特定命令的错误
  • 该代码将使用IFS的默认值(space + tab + newline)。 如果可以在程序的其他位置将IFS设置为其他内容,则使用IFS=$' \\t\\n' read -r -d '' ...显式设置它。
  • 如果您更改文件格式(所有值都在一行上,每行一个值,...),并且假定它仍然仅包含四个值,则该代码将继续起作用。
  • 如果文件实际上包含许多行对,则该代码将无法工作。 在这种情况下, oguz ismail“读取两次”解决方案是不错的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM