$的含义是什么?在shell脚本中?

Ren*_*h G 47 linux shell-script

在浏览一个 shell 脚本时,我看到了“$?”这个词。这个词有什么意义?

cjm*_*cjm 53

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

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


Bru*_*ger 31

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
Run Code Online (Sandbox Code Playgroud)

如果可能的话(有时会出现可读性问题),您应该对这种情况进行不同的编码:

if run_some_command
then
    # Do work when command exists on success
else
    # Do failure exit work
fi
Run Code Online (Sandbox Code Playgroud)

后一种用法更快,不会用相当于临时变量的东西污染 shell 的变量命名空间,通常对人类更具可读性,并鼓励使用“正逻辑”,即编写没有否定条件的条件的做法,具有认知大多数情况下的简单性。它取消$?了大部分的使用。

  • 当存在比 0 或 1 更多的可能性时,更复杂的语法是必要的——程序通常通过退出代码来传达有用的信息。如果您稍后需要在代码中重新使用该值(例如,用于日志记录),它也很有用。 (7认同)

小智 8

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

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

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

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