我有一个生成3行输出的命令,如
$ ./mycommand
1
asdf
qwer zxcv
Run Code Online (Sandbox Code Playgroud)
我想将这3行分配给3个不同的变量($ a,$ b,$ c)
$ echo $a
1
$ echo $b
asdf
$ echo $c
qwer zxcv
Run Code Online (Sandbox Code Playgroud)
我熟悉while循环方法,它通常用于从包含3行组的输出一次读取3行.但考虑到我的命令只输出3行,这似乎不太优雅.
我尝试使用各种值的组合IFS=和选项read -r a b c,将命令输出作为stdin发送,但我只能得到它将第一行设置为第一个变量.一些例子:
IFS= read -r a b c < <(./mycommand)
IFS=$'\n' read -r a b c < <(./mycommand)
IFS= read -r -d $'\n' < <(./mycommand)
Run Code Online (Sandbox Code Playgroud)
如果我修改我的命令以便3行用空格而不是换行符分隔,只要每个前一行被正确引用,我就可以成功地使用这个变量:
read -r a b c < <(./mycommand)
Run Code Online (Sandbox Code Playgroud)
虽然这对我目前的项目来说是有效的,但是我仍然不知道我无法以其他方式工作.所以我想知道是否有人能够通过3行输出看到并解释我在原始尝试中缺少的内容.
如果要从三行读取数据,请使用三个读取:
{ read -r a; read -r b; read -r c; } < <(./mycommand)
Run Code Online (Sandbox Code Playgroud)
read读取一大块数据然后将其拆分.你不能让它工作,因为你的块总是单行.