在Bash中,似乎有几个变量具有特殊的,一致意义的值。例如,
./myprogram &; echo $!
将返回后台myprogram
的进程的PID。我知道其他人,比如$?
,我认为这是目前的TTY。还有其他人吗?
答案 0 :(得分:1214)
$1
,$2
,$3
,...是positional parameters。"$@"
是所有位置参数的数组式结构,{$1, $2, $3 ...}
。"$*"
是所有位置参数的{IFS扩展$1 $2 $3 ...
。$#
是位置参数的数量。$-
为shell设置的当前选项。$$
当前shell的pid(不是子shell)。$_
最近的参数(或启动后立即启动当前shell的命令的abs路径)。$IFS
是(输入)字段分隔符。$?
是最新的前台管道退出状态。$!
是最近的后台命令的PID。$0
是shell或shell脚本的名称。以上大部分内容都可以在Bash参考手册的Special Parameters下找到。有environment variables set by the shell。
有关综合索引,请参阅Reference Manual Variable Index。
答案 1 :(得分:44)
$_
最后一个命令的最后一个参数$#
传递给当前脚本的参数数量$*
/ $@
作为字符串/分隔列表传递给脚本的参数列表答案 2 :(得分:13)
为帮助了解$#
,$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
答案 3 :(得分:4)
注意一些例子; $ 0可能包括一些前导路径以及程序名称。例如,将这两行脚本保存为./mytry.sh并执行它。
#!/bin/bash
echo "parameter 0 --> $0" ; exit 0
输出:
parameter 0 --> ./mytry.sh
这是当前(2016年)版本的Bash,通过Slackware 14.2