什么是特殊的美元符号shellvariables?

在Bash中,似乎有几个variables具有特殊的,一致的含义值。 例如,

./myprogram &; echo $! 

将返回后台myprogram进程的PID。 我知道别人,比如$? 我认为这是目前的TTY。 有其他人吗?

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

以上大部分内容可以在Bash参考手册中的特殊参数下find。 有所有由shell设置的环境variables 。

有关全面的索引,请参阅参考手册variables索引 。

  • $_最后一个命令的最后一个参数
  • $#传递给当前脚本的参数数量
  • $* / $@作为string/分隔列表传递给脚本的参数列表

离开我的头顶。 谷歌为bash特殊variables。

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

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

运行它将返回一个代表性输出:

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

注意一些例子, $ 0可能包含一些主要path以及程序的名称。 例如,将这两行脚本保存为./mytry.sh并执行它。

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

输出:

 parameter 0 --> ./mytry.sh 

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