协慌网

登录 贡献 社区

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

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

./myprogram &; echo $!

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

答案

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

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

有关全面的索引,请参见《 参考手册变量索引》

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

从我的头顶上掉下来。 Google for bash 特殊变量。

为了帮助理解$#$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