Special Parameters 特殊参数

shell 对一些参数做特殊处理。这些参数只能被引用而不能被赋值。


扩展为位置参数,从 1 开始。如果扩展发生在双引号中,它扩展为一个词,值是各个参数,以特殊变量 IFS 的第一个字符分隔。也就是说,"$*" 等价于 "$1c$2c...",这里 c 是变量 IFS 的第一个字符。如果没有设置 IFS, 那么参数将用空格分隔。 IFS

@

扩展为位置参数,从 1 开始。如果扩展发生在双引号中,每个参数都将扩展为一个词。也就是说, "$@" 等价于 "$1" "$2" ... 如果位置参数不存在,"$@" 和 $@ 扩展为空 (即,它们被删除了)。

#

扩展为位置参数的个数,以十进制表示。

?

扩展为最近执行的前台管道的状态。


扩展为当前选项标志。标志是在启动时或以内建命令 set 指定的,或者是 shell 自身设置的 (例如选项 -i )。

$

扩展为 shell 的进程 ID。在一个 () 子 shell 中,它扩展为当前 shell 的 进程 ID 而不是子 shell 的。

!

扩展为最近一次执行的后台 (异步) 命令的进程号。

0

扩展为 shell 或者 shell 脚本的名称。这个变量是在 shell 初始化时设置的。如果 bash 是执行脚本文件时启动的, $0 将设置为那个文件的名称。如果 bash 启动时的参数包含 -c, 那么 $0 被设置为启动命令行被执行后的第一个参数,如果有的话。否则,它被设置为用来启动 bash 的文件名,就是参数 0。


shell 启动时,设置为 shell 或参数中被执行的 shell 脚本的绝对路径名。 然后,在扩展时扩展为上一个命令的最后一个参数。它也被设置为被执行的每个命令的文件全名并且 被设置到这个命令执行的环境当中。当检查邮件时,这个参数保存着正在检查的邮件文件的名称。