Ole*_*Ole 206 unix linux bash scripting
我有一个shell脚本,其中包含以下行:
[ "$DEBUG" == 'true' ] && set -x
Run Code Online (Sandbox Code Playgroud)
Joh*_*nck 290
set -x启用shell的模式,其中所有执行的命令都打印到终端.在您的情况下,它显然用于调试,这是一个典型的用例set -x:打印每个命令,因为它执行时可以帮助您可视化脚本的控制流,如果它没有按预期运行.
Raj*_*aju 67
set -x在命令,命令命令,选择命令以及命令及其参数或关联的单词列表在扩展之后和执行之前打印一系列简单命令.扩展PS4变量的值,并在命令及其扩展参数之前打印结果值.
set -x
echo `expr 10 + 20 `
+ expr 10 + 20
+ echo 30
30
Run Code Online (Sandbox Code Playgroud)
set +x
echo `expr 10 + 20 `
30
Run Code Online (Sandbox Code Playgroud)
上面的例子说明了它的用法set -x.使用它时,上面的算术表达式已经扩展.我们可以看到如何逐步评估单线.
expr已经过评估.echo已经过评估.要了解有关set的更多信息,请访问此链接
说到shell脚本,
[ "$DEBUG" == 'true' ] && set -x
Run Code Online (Sandbox Code Playgroud)
选择执行模式时,您的脚本可能已经打印了一些额外的信息行DEBUG.传统上,人们习惯在使用可选参数调用脚本时启用调试模式-d
Rod*_*rry 12
-u:默认禁用。激活后,使用未配置的变量时会显示错误消息。
-v:默认不活动。激活后,在输出信息前会显示信息的原始内容(无可变分辨率)。
-x:默认不活动。如果激活,在命令运行前会显示命令内容(变量解析后有一个++符号)。
比较以下差异:
/ # 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
Run Code Online (Sandbox Code Playgroud)