$是什么意思?在shell脚本中?


Answers:



26

Cjm的答案是正确的,但是$?可以在shell脚本中以愚蠢的方式使用,我想警告这一点。许多不良的Shell脚本都有重复的代码模式:

run_some_command
EXIT_STATUS=$?

if [ "$EXIT_STATUS" -eq "0" ]
then
    # Do work when command exists on success
else
    # Do work for when command has a failure exit
fi

如果有可能(有时会引起可读性问题),您应该以不同的方式编写这种情况的代码:

if run_some_command
then
    # Do work when command exists on success
else
    # Do failure exit work
fi

后者的使用速度更快,不会将外壳变量的名称空间污染到临时变量,对人类而言通常更易读,并鼓励使用“正逻辑”,即写无条件的条件式的做法,具有认知在大多数情况下都很简单。它$?在很大程度上消除了对的使用。


5
如果存在的可能性不仅是0或1,还需要更复杂的语法-程序通常通过退出代码传达有用的信息。如果以后需要在代码中重用该值(例如,用于记录),它也很有用。
mattdm 2011年

3

除了cjm所说的以外,如果的值为$?0,则前一个进程确实正常(或成功)终止。否则会有一些错误。


8
它并不总是表示错误。diff如果比较的文件相同,则以0退出;如果它们不同,则以1退出; 2是错误。
肖恩·高夫

2
从不表示错误。这只是前一个命令的退出状态。“如果正常退出,则为0”是一种惯例(EXIT_SUCCESS / EXIT_FAILURE)
aviraldg

3

$?-最后执行的命令的退出状态。

$0-当前脚本的文件名。

$#-提供给脚本的参数数量。

$$-当前外壳的进程号。对于Shell脚本,这是它们执行时的进程ID。


0

$?在提示时向我们提供上次执行命令的执行状态。值“ 0”表示命令已成功执行,“ 1”表示命令未成功执行。


2
不仅在交互式提示符下,而且还在脚本中,并且任何非零值都表示失败。
Kusalananda

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.