一、Shell 特殊参数解释
首先来看几个特殊变量:$0, $#, $*, $@, $?, $$, $_

#!/bin/bash
echo $0    # 当前脚本的文件名(间接运行时还包括绝对路径)。
echo $n    # 传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个参数是 $1 。
echo $#    # 传递给脚本或函数的参数个数。
echo $*    # 传递给脚本或函数的所有参数。
echo $@    # 传递给脚本或函数的所有参数。被双引号 (" ") 包含时,与 $* 不同,下面将会讲到。
echo $?    # 上个命令的退出状态,或函数的返回值。
echo $$    # 当前 Shell 进程 ID。对于 Shell 脚本,就是这些脚本所在的进程 ID。
echo $_    # 上一个命令的最后一个参数
echo $!    # 后台运行的最后一个进程的 ID 号

执行

$ ./test.sh test test1 test2 test3 test4

./test.sh                      # $0
                               # $n
5                              # $#
test test1 test2 test3 test4   # $*
test test1 test2 test3 test4   # $@
0                              # $?
12305                          # $$
12305                          # $_
                               # $!

$* 和 $@ 都表示传递给函数或脚本的所有参数,不被双引号 ("") 包含时,都以"$1"“2"…"2" … "2""n” 的形式输出所有参数。

但是当它们被双引号 ("") 包含时,"$*“会将所有的参数作为一个整体,以”$1 $2 … n"的形式输出所有参数;"n"的形式输出所有参数;"n""@“会将各个参数分开,以”$1"“2"…"2" … "2""n” 的形式输出所有参数。

二、方法1:$0,$1,$2…
采用$0,$1,$2…等方式获取脚本命令行传入的参数,值得注意的是,0获取到的是脚本路径以及脚本名,后面按顺序获取参数,当参数超过10个时(包括10个),需要使用0获取到的是脚本路径以及脚本名,后面按顺序获取参数,当参数超过10个时(包括10个),需要使用010(10)使{10},${11}…才能获取到参数。

示例2:新建一个test.sh的文件

#!/bin/bash
echo "脚本$0"
echo "第一个参数$1"
echo "第二个参数$2"

执行结果如下:

$ ./test.sh 1 2
 
#shell中将会输出:
脚本./test.sh
第一个参数1
第二个参数2
Logo

更多推荐