为什么“set -v”似乎在 bash 的子 shell 中不起作用?

Mar*_*itz 3 debugging bash shell

看起来set -v在子 shell 中不起作用?为什么?

set -x确实可以在子 shell 中工作,但输出有点忙)。

$ cat foo.sh
set -v
date
set +v > /dev/null 2>&1

$ bash foo.sh
date
Fri Mar  3 14:52:34 PST 2017
set +v > /dev/null 2>&1

$ cat foo_subshell.sh
(
  set -v
  date
)

$ bash foo_subshell.sh
Fri Mar  3 14:52:42 PST 2017
Run Code Online (Sandbox Code Playgroud)

Bar*_*mar 5

文档说:

-v在读取 shell 输入行时打印它们。

当您在括号中编写子 shell 时,将读取整个子 shell,然后执行它。因此,直到读取完所有命令set -v才会执行该命令,因此打印它们为时已晚。