Bash 的“set -v”不会将大括号内的命令回显到标准输出

Bash 的“set -v”不会将大括号内的命令回显到标准输出

我有以下测试脚本:

# test.bash
#----------
{

   set -v # Echoes the following 3 parameters
   DELAY_MS=2000
   SCALING=false
   VERBOSE=false
   set +v

   echo TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST

} 2>&1 | tee test.bash.out

它设置 3 个变量并回显一行TEST输出。由于set -v,我希望 3 个变量设置能够镜像到标准输出tee愿意test.bash.out。但是,它们既不会出现在 Bash 控制台中,也不会出现在test.bash.out.

他们为什么不出现?

有没有一种简单的方法可以让变量显示在标准输出

答案1

set -v( 的缩写set -o verbose)打印源代码行当他们被读到时,并且在 shell 可以执行大括号内的任何内容之前,它必须读取所有内容以找出&末尾是否有重定向或管道或等。 (并检查}某处是否存在匹配,尽管您可能会认为这并不完全必要。)

如果你想看看外壳是什么执行,使用set -x( 或set -o xtrace) 代替。

相关内容