Shell 脚本获取参数主要使用$
,下面是具体的用法介绍。
-
使用
$
获取参数。$0
表示当前运行的脚本名称。$n
表示传递的第n
个参数。$#
可以获取传递的参数个数。$*
以字符串的形式显示所有的参数,每个参数之间使用空格分割。
另外,也可使用$@
获取所有的参数。
假设编写的 Shell 文件为params.sh
,内容如下:
echo '1. use "$0" get current shell filename:' echo "Current shell filename is $0." echo '2. use "$#" cal how many params:' echo "Input $# params." echo '3. use "$2" get the second param:' echo $2 echo '4. use "$*" output all params:' echo $* echo '5. use "$@" output all params:' echo $@
运行命令
sh params.sh param1 param2 param3
得到的结果如下:1. use "$0" get current shell filename: Current shell filename is paramsDemo.sh. 2. use "$#" cal how many params: Input 3 params. 3. use "$2" get the second param: param2 4. use "$*" output all params: param1 param2 param3 5. use "$@" output all params: param1 param2 param3
-
脚本中使用的其他
$
命令。$-
显示 Shell 使用的当前选项,与set
命令功能相同。$$
获取当前脚本运行的进程号。$?
获取上一条命令执行的返回码,通常情况下,返回码为 0 表示上一条命令运行正常。
-
$@
和$*
的区别。- 使用
''
包裹时或者不包裹时没有区别,所有的参数会当成一个字符串输出。 - 使用
""
包裹时,"$@"
会将所有的参数放入到数组中了,相当于分别输出各个参数。
下面提供一个示例演示
"$*"
和$@
的不同之处:echo "-- \$* 演示 ---" for p in "$*"; do echo $p done echo "-- \$@ 演示 ---" for p in "$@"; do echo $p done
当给上述脚本传入两个参数
param1 param2
后,输出结果如下:-- $* 演示 --- param1 param2 -- $@ 演示 --- param1 param2
从这个例子可知,
"$@"
命令会将每个参数分散开来。 - 使用