我对 非常陌生bash
。我当前工作目录中有一个名为的文件osss
,我的脚本是:
read s1 s2 s3 < <( more osss)
echo "$s1 $s2 $s3"
exit
的内容osss
为:
Fooo
Booo
Mooo
Fooo
被分配给s1
但booo
和mooo
未被分配给s2
和s3
。
问题是:为什么?我哪里做错了?
答案1
单次read
读取一行。行中的多个单词可以分配给多个变量。
但是一行中不能有多个单词。您有多行。您需要三个read
命令才能读取此内容。或者您可以迭代单个命令三次。
另外这个片段
… < <( more osss)
看起来很奇怪。<osss
可能就够了。不过我认为这和你的实际问题无关。
答案2
问题是:为什么?我哪里做错了?
答案是你没有使用正确的功能,和你用错了。请参阅男人读为了启迪,从以下经文开始:
读一线
为了实现你的目标我会这样做:
readarray -t lines < osss
printf "%s " "${lines[@]}"
解释:首先,将所有行读入一个数组,然后打印所有数组项,并用空格分隔。这比创建单个变量和使用循环更有意义,并且不需要事先知道总行数。
笔记:有几种逐行处理文本文件的工具,例如,,,,sed
。根据您需要执行的操作,将行的内容保存到变量中可能是多余的。awk
perl -lane
php -r
bash