一、位置参数
除了默认环境变量,dash shell还给命令行上定义的参数分配了特殊变量。下面是dash shell
中用到的位置参数变量。
$0:shell的名称。
$n:第n个位置参数。
$*:含有所有参数内容的单个值,由IFS环境变量中的第一个字符分隔;没定义IFS的话,
由空格分隔。
$@:将所有的命令行参数展开为多个参数。
$#:位置参数的总数。
$?:最近一个命令的退出状态码。
$-:当前选项标记。
$$:当前shell的进程ID(PID)。
$!:最近一个后台命令的PID。
二、向函数传数组参数
如果你试图将该数组变量作为函数参数,函数只会取数组变量的第一个值。
要解决这个问题,你必须将该数组变量的值分解成单个的值,然后将这些值作为函数参数使
用。在函数内部,可以将所有的参数重新组合成一个新的变量。下面是个具体的例子。
$ cat test10
脚本内容:
#!/bin/bash
# array variable to function test function testit
{
local newarray
newarray=(;'echo "$@"')
echo "The new array value is: ${newarray[*]}"
}
myarray=(1 2 3 4 5)
echo "The original array is ${myarray[*]}"
testit ${myarray[*]}
命令输出:
$ ./test10 The original array is 1 2 3 4 5 The new array value is: 1 2 3 4 5
移动变量
bash shell工具箱中另一件工具是shift命令。bash shell的shift命令能够用来操作命令行参
数。跟字面上的意思一样,shift命令会根据它们的相对位置来移动命令行参数。
在使用shift命令时,默认情况下它会将每个参数变量向左移动一个位置。所以,变量$3
的值会移到2的值会移到1的值则会被删除(注意,变量$0的值,也
就是程序名,不会改变)。
这是遍历命令行参数的另一个好方法,尤其是在你不知道到底有多少参数时。你可以只操作
第一个参数,移动参数,然后继续操作第一个参数。
这里有个例子来解释它是如何工作的。
$ cat test13.sh
#!/bin/bash
# demonstrating the shift commandecho
count=1
while [ -n "$1" ]
do
echo "Parameter #$count = $1"
count=$[ $count + 1 ]
shift
done
测试的输出
$
$ ./test13.sh rich barbara katie jessicaParameter
#1 = rich Parameter
#2 = barbara Parameter
#3 = katie Parameter
#4 = jessica
$
这个脚本通过测试第一个参数值的长度执行了一个while循环。当第一个参数的长度为零
时,循环结束。测试完第一个参数后,shift命令会将所有参数的位置移动一个位置。
另外,你也可以一次性移动多个位置,只需要给shift命令提供一个参数,指明要移动的位
置数就行了。
$ cat test14.sh
#!/bin/bash
# demonstrating a multi-position shift
# echo
echo "The original parameters: $*"
shift 2
echo "Here's the new first parameter: $1"
测试输出:
$
$ ./test14.sh 1 2 3 4 5
The original parameters: 1 2 3 4 5
Here's the new first parameter: 3
$
通过使用shift命令的参数,就可以轻松地跳过不需要的参数。