为什么 read 命令不能与 echo 和管道一起使用?

为什么 read 命令不能与 echo 和管道一起使用?

关于以下命令:

$ 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 只是现实生活中脚本的一个示例,但 afifomktemp是以安全的方式使用和创建的。

相关内容