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

./myprogram &; echo $!

将返回后台进程的PID。我知道其他的,比如$?我想这就是现在的TTY。还有其他的吗?


当前回答

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

我能想到的。谷歌表示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

$1, $2, $3, ... are the positional parameters. "$@" is an array-like construct of all positional parameters, {$1, $2, $3 ...}. "$*" is the IFS expansion of all positional parameters, $1 $2 $3 .... $# is the number of positional parameters. $- current options set for the shell. $$ pid of the current shell (not subshell). $_ most recent parameter (or the abs path of the command to start the current shell immediately after startup). $IFS is the (input) field separator. $? is the most recent foreground pipeline exit status. $! is the PID of the most recent background command. $0 is the name of the shell or shell script.

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

有关综合索引,请参阅参考手册变量索引。

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

#!/bin/bash

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

输出:

parameter 0 --> ./mytry.sh

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

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

我能想到的。谷歌表示bash特殊变量。