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