886

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

./myprogram &; echo $!

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

4

4 回答 4

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

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

如需综合指数,请参阅参考手册变量指数

于 2011-03-02T04:04:52.233 回答
46
  • $_最后一个命令的最后一个参数
  • $#传递给当前脚本的参数数量
  • $*/$@作为字符串传递给脚本的参数列表 / 分隔列表

离开我的头顶。谷歌搜索 bash 特殊变量。

于 2011-03-02T03:46:22.933 回答
19

为了帮助理解做什么$#$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
于 2016-04-25T12:46:22.247 回答
3

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

#!/bin/bash

echo "parameter 0 --> $0" ; exit 0

输出:

parameter 0 --> ./mytry.sh

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

于 2016-09-14T10:19:31.460 回答