Bash中set -x输出的stderr行首+号数量含义及单+号意义
Bash中set -x输出的+号数量含义解析
+号数量的含义
每行开头的+号数量对应命令的shell嵌套深度:
- 每当命令在子shell(比如
$()命令替换、管道、eval执行的命令)中运行时,嵌套深度加1,+号数量就多一个。 - 结合你给出的输出例子来看:
++ n=2:这是脚本主进程里执行的赋值操作,脚本本身作为一个子shell运行,所以对应2个+号;+++ echo a和+++ wc -c:这是$()命令替换里的子shell命令,属于脚本子shell的下一层进程,所以对应3个+号;++ eval 'ls -l | head -1'是脚本主进程的命令(2个+号),而+++ ls -l是eval启动的子进程命令(3个+号)。
单个+号的情况及含义
会出现单个+号,它对应最顶层shell中直接执行的命令,没有任何额外的子shell嵌套:
- 比如在终端里直接执行
set -x后,再运行pwd,输出就会是+ pwd; - 这种场景下命令直接在你当前的交互式shell里执行,没有子shell包裹,所以只显示1个+号。
内容的提问来源于stack exchange,提问作者tom
相关产品推荐
相关产品推荐

