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

时间:2011-03-02 03:42:18

标签: bash environment-variables dollar-sign

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

./myprogram &; echo $!

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

4 个答案:

答案 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)

  • $_最后一个命令的最后一个参数
  • $#传递给当前脚本的参数数量
  • $* / $@作为字符串/分隔列表传递给脚本的参数列表
离开我的头顶。谷歌用于bash特殊变量。

答案 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