如何查找有关bash特殊参数的信息($*$ @ $#$?$ - $$ $!$ 0 $ _)?

Kei*_*son 6 bash shell special-characters

(我在这里看到了一些关于Bash特殊参数的问题.$*在Bash手册和Google中搜索这些内容可能很困难.这个问题旨在成为这些问题的一般参考.)

Bash shell定义了许多"特殊参数"(这本身有点令人困惑,因为我们大多数人认为它们是"变量",而不是"参数").对它们的引用包括一个美元符号,后跟一些标点字符.

谷歌搜索由标点字符组成的字符串是众所周知的困难,例如,$?Bash参考手册中没有出现过.

如何查找有关特定Bash特殊参数的信息?

Kei*_*son 10

关于Bash特殊参数的文档:

$* $@ $# $? $- $$ $! $0 $_
Run Code Online (Sandbox Code Playgroud)

可以在Bash参考手册中找到,特别是在第3.4.2节"特殊参数"中.如果您的系统上安装了bash文档,则可以键入

% info bash
Run Code Online (Sandbox Code Playgroud)

然后搜索"特殊参数".

正如rici在评论中指出的那样,在info命令中你也可以通过索引找到特殊参数:输入i然后输入单个字符(不包括$),然后输入.这不起作用?,并且搜索!首先找到不同的部分(键入,以查找下一个条目工作).(在我应用补丁后,这仍然相当不错.)

这是不幸的,恕我直言,这部分涉及到这些参数主导$角色.(我刚刚提交了一个改变它的补丁.)

简要总结(但请阅读手册了解详情):

  • $*:扩展到以...开头的位置参数$1.
  • $@:也扩展为位置参数,但用双引号括起来时表现不同.
  • $#:扩展为十进制的位置参数数.
  • $?:扩展到最新命令的退出状态.(类似于$statuscsh和tcsh.)
  • $-:扩展为当前选项标志.
  • $!:扩展为最新后台命令的进程ID.
  • $0:扩展为shell或脚本的名称.(注意$0,与$1et al 不同,它不是位置参数.)
  • $_:最初设置为绝对路径名用于调用shell或shell脚本,稍后设置为上一个命令的最后一个参数.(还有更多;请参阅手册.)

更新:

从2014年2月26日发布的bash版本4.3开始,bash文档被注释为显示这些变量的全名.在4.2版中:

`#'
     Expands to the number of positional parameters in decimal.
Run Code Online (Sandbox Code Playgroud)

在4.3版中:

`#'
     ($#) Expands to the number of positional parameters in decimal.
Run Code Online (Sandbox Code Playgroud)

  • 如果你有`bash`手册页,可能是默认安装的,你可以`man bash`并搜索特殊参数.如果您安装了`info`文件(某些发行版上的`bash-doc`包),您可以使用`i`命令搜索索引中的单个特殊字符.例如`我*`.这几乎适用于所有特殊参数.(`info bash'--index-search =*'`是可能的,但输入的内容太多了.) (2认同)