我尝试过这个:
qs@BF:~$ echo aaa | read c
qs@BF:~$ echo $c
它什么也没给出,这意味着 $c 是一个空宏。
但是为什么下面这个有效:
qs@BF:~$ cat trim.hs | read cc
qs@BF:~$ echo $cc
import qualified Data.Text as T
它正确地给出了trim.hs的第一行
当 echo
通过 read
进行管道传输时,可能会出现异常。
我对吗?您能帮助我使 echo
与 read
兼容吗?请。
最佳答案
这些都“不起作用”
echo aaa | read c
cat trim.hs | read cc
在bash中,管道中的命令都是在子shell中执行的。因此,read
命令在子 shell 中设置变量 c
,但随后该子 shell 退出并且其环境消失
为了演示,让我们使用分组构造在子 shell 中查询 $c
的值:
unset c
echo 123 | { read c; echo in subshell: ">$c<"; }
echo in parent: ">$c<"
输出
in subshell: >123<
in parent: ><
bash 确实有一个设置,允许管道中的last 命令在当前 shell 中运行:
set +m # job control must be disabled
shopt -s lastpipe # enable the option
unset d
echo 456 | read d
echo ">$d<"
>456<
关于linux - 如何使 echo 与 bash 中的 read 兼容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29605800/