我有一个生成 3 行输出的命令,例如
$ ./mycommand
1
asdf
qwer zxcv
我想将这 3 行分配给 3 个不同的变量($a、$b、$c),这样
$ echo $a
1
$ echo $b
asdf
$ echo $c
qwer zxcv
我熟悉通常用于从包含 3 行集合的输出中一次读取 3 行的 while 循环方法。但考虑到我的命令只会输出 3 行,这似乎不够优雅。
我尝试使用 IFS=
的值和 read -r a b c
的选项的各种组合,将命令输出作为标准输入发送,但我只能得到它将第一行设置为第一个变量。一些例子:
IFS= read -r a b c < <(./mycommand)
IFS=$'\n' read -r a b c < <(./mycommand)
IFS= read -r -d $'\n' < <(./mycommand)
如果我修改我的命令,使 3 行由空格而不是换行符分隔,只要前面的每一行都被正确引用,我就可以成功地使用这个变体:
read -r a b c < <(./mycommand)
虽然这对我当前的项目有用,但它仍然困扰着我,我无法让它以其他方式工作。所以我想知道是否有人可以看到并解释我在最初的 3 行输出尝试中遗漏了什么。
最佳答案
如果要读取三行数据,使用三读:
{ read -r a; read -r b; read -r c; } < <(./mycommand)
read
读取一大块数据,然后将其拆分。你无法让它工作,因为你的 block 总是单行。
关于linux - 在 bash 中将 3 个输出行读入 3 个变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33047996/