read 命令不会将文件行读入多个变量

read 命令不会将文件行读入多个变量

我对 非常陌生bash。我当前工作目录中有一个名为的文件osss,我的脚本是:

read s1 s2 s3 < <( more osss) 
echo "$s1 $s2 $s3" 
exit 

的内容osss为:

Fooo
Booo
Mooo

Fooo被分配给s1booomooo未被分配给s2s3

问题是:为什么?我哪里做错了?

答案1

单次read读取一行。行中的多个单词可以分配给多个变量。

但是一行中不能有多个单词。您有多行。您需要三个read命令才能读取此内容。或者您可以迭代单个命令三次。


另外这个片段

… < <( more osss)

看起来很奇怪。<osss可能就够了。不过我认为这和你的实际问题无关。

答案2

问题是:为什么?我哪里做错了?

答案是你没有使用正确的功能,你用错了。请参阅男人读为了启迪,从以下经文开始:

线


为了实现你的目标我会这样做:

readarray -t lines < osss
printf "%s " "${lines[@]}"

解释:首先,将所有行读入一个数组,然后打印所有数组项,并用空格分隔。这比创建单个变量和使用循环更有意义,并且不需要事先知道总行数。

笔记:有几种逐行处理文本文件的工具,例如,,,,sed。根据您需要执行的操作,将行的内容保存到变量中可能是多余的。awkperl -lanephp -rbash

相关内容