myvar
我完全不明白为什么 Bash在这个例子中不具有 的价值。
echo hello | read myvar && echo $myvar
我会理解,如果我将该命令作为两个单独的命令运行,那么第二行将不存在变量的范围。
答案1
管道进程在子 shell 中运行,子进程不可能影响其父进程的环境(当子进程终止时,它们自己的环境也会消失)。在您的示例中,read myvar
在子 shell 中运行 - 设置了 myvar,但不会(不能)传播回运行这两个echo
语句的父 shell。
您需要使用此处的字符串或重定向,并且流程替代而不是管道。例如:
这里的字符串:
$ read myvar <<<"hello" && echo $myvar
hello
该字符串可以是固定字符串或变量或两者的组合:
$ read myvar <<<"Hello $USER, your home is $HOME" && echo $myvar
Hello cas, your home is /home/cas
重定向和进程替换:
$ read myvar < <(echo hello) && echo $myvar
hello