我有一个shell脚本与以下一行在它:

[ "$DEBUG" == 'true' ] && set -x

当前回答

-u:默认关闭。当激活时,当使用未配置的变量时将显示错误消息。 -v:默认为inactive。激活后,将显示信息的原始内容(无可变分辨率) 输出信息。 -x:默认为inactive。如果激活,命令内容将在命令运行之前显示(变量解析后,有 是++符号)。

比较以下差异:

/ # set -v && echo $HOME
/root
/ # set +v && echo $HOME
set +v && echo $HOME
/root

/ # set -x && echo $HOME
+ echo /root
/root
/ # set +x && echo $HOME
+ set +x
/root

/ # set -u && echo $NOSET
/bin/sh: NOSET: parameter not set
/ # set +u && echo $NOSET

其他回答

-u:默认关闭。当激活时,当使用未配置的变量时将显示错误消息。 -v:默认为inactive。激活后,将显示信息的原始内容(无可变分辨率) 输出信息。 -x:默认为inactive。如果激活,命令内容将在命令运行之前显示(变量解析后,有 是++符号)。

比较以下差异:

/ # set -v && echo $HOME
/root
/ # set +v && echo $HOME
set +v && echo $HOME
/root

/ # set -x && echo $HOME
+ echo /root
/root
/ # set +x && echo $HOME
+ set +x
/root

/ # set -u && echo $NOSET
/bin/sh: NOSET: parameter not set
/ # set +u && echo $NOSET

Set -x启用一种shell模式,其中所有执行的命令都打印到终端。在您的示例中,它显然用于调试,这是set -x的典型用例:在执行每个命令时打印它可以帮助您可视化脚本的控制流,如果脚本没有按预期运行的话。

Set +x禁用它。

设置- x

打印简单命令的跟踪,对于命令、大小写命令,请选择 命令,以及命令及其参数的算术或 展开之后和展开之前的关联单词列表 执行。PS4变量的值被展开,结果是 值在命令及其展开参数之前打印。

(来源)

例子

set -x
echo `expr 10 + 20 `
+ expr 10 + 20
+ echo 30
30

set +x
echo `expr 10 + 20 `
30

上面的例子说明了set -x的用法。使用时,上述算术表达式已展开。我们可以看到单行是如何一步一步求值的。

第一步expr已经求值。 第二步回声已被评估。

要了解更多关于set的信息,请访问这个链接

当涉及到shell脚本时,

[ "$DEBUG" == 'true' ] && set -x

当执行模式选择为DEBUG时,脚本可能已经打印了一些额外的信息行。传统上,人们习惯在调用带有可选参数(如-d)的脚本时启用调试模式