谁能解释这种行为?运行:
#!/bin/sh echo "hello world" | read var1 var2 echo $var1 echo $var2
导致没有输出,而:
#!/bin/sh echo "hello world" > test.file read var1 var2 < test.file echo $var1 echo $var2
产生预期的输出:
hello world
管道不应该一步一步地执行第二个示例中对test.file的重定向吗?我对破折号和bash壳都尝试了相同的代码,并且两者的行为相同。
bash该lastpipe选项最近添加了一个选项,当停用作业控制时,该选项允许管道中的最后一条命令在当前外壳程序中运行,而不是子外壳程序中运行。
bash
lastpipe
#!/bin/bash set +m # Deactiveate job control shopt -s lastpipe echo "hello world" | read var1 var2 echo $var1 echo $var2
确实会输出