什么是特殊的美元符号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