什么是特殊的美元符号shell变量?

在Bash中,似乎有几个变量持有特殊的、一致的含义值。例如,

./myprogram &; echo $!

将返回回溯到myprogram的进程的PID。我知道其他人,例如$?,我认为它是当前的TTY。还有其他的吗?

416972 次浏览
  • $_最后一个命令的最后一个参数
  • $#传递给当前脚本的参数数
  • $*/$@作为字符串/分隔列表传递给脚本的参数列表

从我的头顶上掉下来。谷歌获取bash特殊变量。

  • $1$2$3,…是位置参数
  • "$@"是所有位置参数的类似数组的构造,{$1, $2, $3 ...}
  • "$*"是所有位置参数的IFS展开,$1 $2 $3 ...
  • $#是位置参数的数量。
  • $-为shell设置的当前选项。
  • $$当前shell(不是subshell)的pid。
  • $_最近的参数(或启动后立即启动当前shell的命令的abs路径)。
  • $IFS是(输入)字段分隔符。
  • $?是最近的前台管道退出状态。
  • $!是最近的后台命令的PID。
  • $0是shell或外壳脚本的名称。

以上大部分可以在Bash参考手册的特殊参数下找到。有所有的shell设置的环境变量

有关综合索引,请参阅参考手册变量索引

为了帮助理解$#$0$1、…、$n做了什么,我使用这个脚本:

#!/bin/bash
for ((i=0; i<=$#; i++)); doecho "parameter $i --> ${!i}"done

运行它会返回一个有代表性的输出:

$ ./myparams.sh "hello" "how are you" "i am fine"parameter 0 --> myparams.shparameter 1 --> helloparameter 2 --> how are youparameter 3 --> i am fine

注意一些示例;0美元可能包括一些前导路径以及程序名称。例如将这两行脚本保存为./mytry.sh并执行它。

#!/bin/bash
echo "parameter 0 --> $0" ; exit 0

输出:

parameter 0 --> ./mytry.sh

这是当前(2016年)版本的Bash,通过Slackware 14.2