bash特殊参数是预定义的变量,在bash中用于提供关于当前正在执行的脚本或命令的信息,或用于操作命令行参数或其他 shell 设置。这些参数有特殊的含义,不能赋新值,只能引用。
以下是最常用的 Bash 8个特殊参数:
- $*:($*) 扩展为从1开始的位置参数。在非双引号内进行扩展时,每个位置参数扩展为一个单独的单词。在执行它的上下文环境中,这些单词将进一步被拆分为单词和文件名扩展。当扩展出现在双引号内时,它会扩展为一个单词,其中每个参数的值由IFS特殊变量的第一个字符分隔。也就是说,"$*"等同于"$1c$2c...",其中c是IFS变量值的第一个字符。如果IFS未设置,则参数用空格分隔。如果IFS为空,则参数被直接连接在一起,没有中间分隔符。
![](/a2020/img/data-img.jpg)
- $@:($@) 扩展为从1开始的位置参数。在执行单词分割的上下文中,它将每个位置参数扩展为单独的单词;如果不在双引号内,这些单词将被分割成单词。在不执行单词分割的上下文中,它将扩展为每个位置参数由空格分隔的单个单词。当扩展发生在双引号内,并且执行单词分割时,每个参数将扩展为单独的单词。也就是说,"$@" 相当于 "$1" "$2" ...。如果双引号扩展出现在一个单词中,第一个参数的扩展将与原始单词的开始部分连接,最后一个参数的扩展将与原始单词的最后部分连接。当没有位置参数时,"$@" 和 $@ 扩展为空(即它们被移除)。
![](/a2020/img/data-img.jpg)
- $#:扩展为位置参数的个数。
![](/a2020/img/data-img.jpg)
- $?:扩展为最近执行的前台管道的退出状态。
![](/a2020/img/data-img.jpg)
- $-:扩展为当前选项标志,由调用时指定,由 set 内置命令指定,或由 shell 自身设置(例如 -i 选项)。
![](/a2020/img/data-img.jpg)
- $:扩展为 shell 进程的进程 ID(PID)。
![](/a2020/img/data-img.jpg)
- $!:扩展为最近执行的后台命令的 PID。
![](/a2020/img/data-img.jpg)
- $0:扩展为正在执行的 shell 或 shell 脚本的名称。
![](/a2020/img/data-img.jpg)
这些特殊参数可以在各种情况下使用,例如条件语句、循环或操作命令行参数时。了解这些特殊参数在编写 bash脚本和处理 bash 命令行时非常有用。