从另一个变量中读取多个变量

时间:2014-07-23 01:11:32

标签: bash

我们说我有一个命令my_command,我确信输出三行如

line 1
line 2
line 3

我希望将这三行存储到三个变量$x$y$z中。我怎样才能在bash中实现这个目标?

2 个答案:

答案 0 :(得分:4)

for name in x y z; do
    read $name
done < <(my_command)

这使用进程替换,以便在子shell中不执行read命令,并且在循环完成后生成的变量可用。变量name用于保存要设置的变量的名称; $name扩展为read设置的变量的名称,因此在循环之后,您有三个变量xyz输出的三行。

您也可以使用here文档而不是进程替换:

for name in x y z; do
    read $name
done <<EOF
$(my_command)
EOF

答案 1 :(得分:4)

这是另一个:

IFS=$'\n' read -d '' x y z __ < <(my_command)

使用-d '',它将分隔符设置为'\0',并使read在一个实例中读取整个输入,而不只是一行。 IFS=$'\n'将换行符(\n)设置为每个值的分隔符。 __是可选的,除了前3行之外还收集任何额外的输入。

来自help read

  

从标准输入或文件描述符中读取单行   如果提供了-u选项,则为FD。该行被分割为字段   单词分裂,并将第一个单词分配给第一个NAME,即   第二个单词到第二个NAME,依此类推,任何剩余的单词   分配到最后一个NAME。只有在$ IFS中找到的字符才是   被认为是单词分隔符。

     

-d delim继续,直到读取DELIM的第一个字符,而不是换行符