在UNIX中重定向输入以读取命令

时间:2011-10-26 13:46:48

标签: shell

我想使用read命令初始化一个变量,该变量的值来自前一个命令的输出。我希望这有效:

echo some_text | read VAR

但是$ VAR是空的。 “read从标准输入读取一行。”该联机帮助页说。管道将echo的输出发送到read的输入。我哪里错了?

我的工作解决方案是

echo text > file ; read VAR < file

但它使用的是文件......

2 个答案:

答案 0 :(得分:7)

我认为你的shell是bash。当存在管道时,管道中的每个命令都在子shell中执行,并且父shell连接所有适当的文件描述符。因此,read命令获取其stdin并设置VAR变量,然后它的subshel​​l退出并带有变量。

您可以使用here-doc

read VAR << END
text
END

或者,在bash中,这是一个here-string

read VAR <<< "text"

或过程替换

read VAR < <(echo text)

答案 1 :(得分:1)

VAR=$( command );怎么样?