我想使用read命令初始化一个变量,该变量的值来自前一个命令的输出。我希望这有效:
echo some_text | read VAR
但是$ VAR是空的。 “read从标准输入读取一行。”该联机帮助页说。管道将echo的输出发送到read的输入。我哪里错了?
我的工作解决方案是
echo text > file ; read VAR < file
但它使用的是文件......
答案 0 :(得分:7)
我认为你的shell是bash。当存在管道时,管道中的每个命令都在子shell中执行,并且父shell连接所有适当的文件描述符。因此,read命令获取其stdin并设置VAR变量,然后它的subshell退出并带有变量。
您可以使用here-doc
read VAR << END
text
END
或者,在bash中,这是一个here-string
read VAR <<< "text"
或过程替换
read VAR < <(echo text)
答案 1 :(得分:1)
VAR=$( command );
怎么样?