it-swarm.cn

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

通过一个Shell脚本时,我看到了术语“ $?”。这个名词的意义是什么?

37
Renjith G

$?扩展为最近执行的前台管道的退出状态。请参阅 Bash手册的“特殊参数”部分

简单来说,它是最后一条命令的退出状态。

43
cjm

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

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

26
Bruce Ediger

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

3
Barun

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

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

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

$$-当前Shell的进程号。对于Shell脚本,这是它们在其下执行的进程ID。

3
Midhun S Sivan

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

0
Rahul Arora