关于以下命令:
$ unset a
$ echo 12 | read a
$ echo $a
$
我期望在第二个语句中将 a 的值设置为 12。但事实证明 a 仍未设置。
答案1
您可以在 bash 中使用进程替换。
read -r a < <(echo 12)
echo "$a"
或者here string
也在 bash 中。
read -r a <<< 12
echo "$a"
在大多数 shell 中,管道的每个命令都在单独的 SubShell 中执行。看为什么我无法通过管道读取数据。
如果您使用的 shell 不支持进程替换,则需要使用临时文件here string
echo 12 > tempfile
read -r a < tempfile
echo "$a"
尽管 tempfile 只是现实生活中脚本的一个示例,但 afifo
或mktemp
是以安全的方式使用和创建的。