如何找到有关 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 $_)? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
在对 GPU 内核进行 doxygen 注释时,如何记录有关网格的信息?
shell bash 技巧说明 shell参数 特殊书写格式