我想使用read命令初始化一个变量,该变量的值来自前一个命令的输出.我希望这有效:
echo some_text | read VAR
Run Code Online (Sandbox Code Playgroud)
但$ VAR是空的."read从标准输入读取一行." 该联机帮助页说.管道将echo的输出发送到read的输入.我哪里错了?
我的工作解决方案是
echo text > file ; read VAR < file
Run Code Online (Sandbox Code Playgroud)
但是它使用了一个文件......
我假设你的shell是bash.当存在管道时,管道中的每个命令都在子shell中执行,并且父shell连接所有适当的文件描述符.因此,read命令获取其stdin并设置VAR变量,然后它的subshell退出并带有变量.
你可以使用here-doc
read VAR << END
text
END
Run Code Online (Sandbox Code Playgroud)
或者,在bash中,这是一个here-string
read VAR <<< "text"
Run Code Online (Sandbox Code Playgroud)
或者进程替换
read VAR < <(echo text)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2460 次 |
| 最近记录: |