在Linux shell 脚本中可能会用到一些命令行参数,常见如下:
$0:脚本名称
$#:执行脚本时传入的参数个数,不包括脚本名称
$@:所有参数
$*:所有参数
$1...$9:第1个参数......第9个参数
$?:不属于位置变量,只是形式上比较相似;表示命令执行的退出状态(正常退出为0)
1.示例
#!/bin/bash echo "file name:"$0 echo "There are $# parameters" echo '"$*":' for var in "$*" do echo $var done echo '$*:' for var in $* do echo $var done echo '"$@":' for var in "$@" do echo $var done echo '$@:' for var in $@ do echo $var done
2. 输出结果:
file name:./position.sh # $0 There are 3 parameters # $# "$*": adams byron clark # 遍历"$*":只有一条记录 $* : # 遍历$* : 三条记录 adams byron clark "$@" : adams # 遍历"$@" : 三条记录 byron clark $@ : # 遍历$@ : 三条记录 adams byron clark
3. $@和$*的区别
a.不加双引号时$@ $*:二者均为以空格分隔,由参数组成的一个字符串。 上例中为"Adams" "byron" "clark"
b. 加双引号时:
"$@" 指 "Adams" "byron" "clark"
"$*" 指"Adams byron clark" (以默认的IFS连接为一个字符串)
c. 不论是否加双引号:$@的展开值是不变的
d. 加单引号,则'$@', '$*'不会被解析成位置变量