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

Posted

技术标签:

【中文标题】如何找到有关 bash 特殊参数的信息 ($* $@ $# $?$- $$ $!$0 $_)? [复制]【英文标题】:How do I find information on bash special parameters ($* $@ $# $? $- $$ $! $0 $_)? [duplicate] 【发布时间】:2013-12-14 20:14:01 【问题描述】:

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

Bash shell 定义了许多“特殊参数”(这本身就有点令人困惑,因为我们大多数人都将它们视为“变量”,而不是“参数”)。对它们的引用由一个美元符号和一些标点符号组成。

Google 搜索由标点字符组成的字符串是出了名的困难,并且在Bash Reference Manual 中没有出现例如$?

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

【问题讨论】:

鉴于这显然是为了作为参考问题而创建的,所以很奇怪看到它作为副本关闭。 【参考方案1】:

关于 Bash 特殊参数的文档:

$* $@ $# $? $- $$ $! $0 $_

可以在Bash Reference Manual,特别是section 3.4.2, "Special Parameters" 中找到。如果你的系统上安装了 bash 文档,你可以输入

% info bash

然后搜索“特殊参数”。

正如 rici 在评论中指出的那样,在info 命令中,您还可以通过索引找到特殊参数:键入i,然后键入单个字符(不包括$),然后回车。这对? 不起作用,搜索! 会首先找到不同的部分(键入, 以查找下一个条目有效)。 (在我应用补丁后,这仍然可以正常工作。)

不幸的是,恕我直言,本节引用这些参数没有前导 $ 字符。 (我刚刚提交了一个补丁来改变这一点。)

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

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

更新

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

`#'
     Expands to the number of positional parameters in decimal.

在 4.3 版中:

`#'
     ($#) Expands to the number of positional parameters in decimal.

【讨论】:

如果您有bash 手册页,可能默认安装,您可以man bash 并搜索特殊参数。如果您安装了info 文件(某些发行版上的bash-doc 包),您可以使用i 命令在索引中搜索单个特殊字符;例如i*。这适用于几乎所有特殊参数。 (info bash '--index-search=*' 是可能的,但是输入太多恕我直言。) @rici: 当然——如果你已经知道“特殊参数”是手册中使用的术语。就个人而言,我倾向于将它们视为“变量”,而不是“参数”。关于索引的好点;我不知道那把戏。 我只是引用您关于搜索“特殊参数”的答案;在 manpage 中,它与 info doc 一样简单。 info 的许多特质之一是,如果您想要索引条目(以 ? 开头),您需要输入两次问号,因为第一个 ? 是“显示完成”字符,巧妙地不同于tab 提交了 bash 补丁?您能否确保有人生成在线文档并更新这些文档。 @devnull:如果补丁被接受,大概会或多或少自动发生。如果没有,我会将补丁提供给任何想要应用它并从源代码构建的人。

以上是关于如何找到有关 bash 特殊参数的信息 ($* $@ $# $?$- $$ $!$0 $_)? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何找到传递给 Bash 脚本的参数数量?

Bash中的位置参数和特殊参数

在对 GPU 内核进行 doxygen 注释时,如何记录有关网格的信息?

shell bash 技巧说明 shell参数 特殊书写格式

[Linux Shell学习系列五]Shell编程基础-Bash的内部变量,位置参数和特殊参数

Bash 入门教程10-处理用户输入