shell 脚本中使用 set -x 时,shell 会在执行每一行之前打印出该行的扩展形式(即,替换变量和命令后的形式)。每一行前面通常会有一个 + 符号来标识这是一个扩展的行。
++ 在标准的 shell 调试输出中并不常见。但在某些工具或某些 shell 的扩展版本中,它可能有特殊的意义。例如,在某些版本的 bash 中,当你使用 PS4 来定制 -x 选项的提示时,可能会看到额外的 + 符号。
在标准的 shell 调试中,- 通常不是直接与调试输出相关的。但如果你在脚本中看到 - 符号,它可能是:脚本中的一个普通字符(如命令的参数)。与 set 命令的 -v 选项相关,该选项会打印出 shell 读取的每一行输入(但通常前面没有 - 符号)。来自某个特定脚本或工具的自定义调试输出。
如果你在使用 set -x 或其他调试选项,并且看到了不熟悉的输出,最好查看你所使用的 shell 的文档,或检查你的脚本中是否有任何自定义的调试代码。
PS4 是一个 bash 特有的变量,它允许你定制 -x 选项的提示。例如,PS4='+${BASH_SOURCE}:${LINENO}:${FUNCNAME[0]}: ' 会为每一行扩展添加一个包含源文件名、行号和函数名的提示。