1.shell特殊变量。
变量 | 含义 |
$0 | 当前脚本的文件名 |
$n | 传递给脚本或函数的参数。n是一个数字,表示第几个参数。如:第一个参数是1,第二个参数是2 |
$# | 传递给脚本或函数的参数个数 |
$* | 传递给脚本或函数的所有参数。 |
$@ | 传递给脚本或函数的所有参数。被双引号(“”)包含时,与$*稍有不同。 |
$? | 上个命令的退出状态,或函数的返回值。 |
$$ | 当前shell进程ID。对于Shell脚本,就是这些脚本所在的进程ID |
2.*和@的区别
*和@都表示传递给函数或脚本的所有参数,不被双引号("")包含时,都以"1","2"..."$n"的形式输出所有参数。
但是当它们被双引号("")包含时,“*”会将所有的参数作为一个整体,以“1 2 ...n”的形式输出所有参数;"@"会将各个参数分开,以"1","2"..."$n"的形式输出所有参数。
#!/bin/bash echo "\$*=" $* echo "\"\$*\"=" "$*" echo "\$@=" $@ echo "\"\$@\"=" "$@" echo "print each param from \$*" for var in $* do echo "$var" done echo "print each param from \$@" for var in $@ do echo "$var" done echo "print each param from \"\$*\"" for var in "$*" do echo "$var" done echo "print each param from \"\$@\"" for var in "$@" do echo "$var"
执行 ./test.sh "a" "b" "c" "d",看到下面的结果:
$*= a b c d "$*"= a b c d $@= a b c d "$@"= a b c d print each param from $* a b c d print each param from $@ a b c d print each param from "$*" a b c d print each param from "$@" a b c d