shift是Unix中非常有用的命令。可以使命令参数左移,从而使脚本程序中命令参数位置不变的情况下依次遍历所有参数。
如shift 3表示原来的$4现在变成$1,原来的$5现在变成$2等等,原来的$1、$2、$3丢弃,$0不移动。不带参数的shift命令相当于shift 1。
示例:shift_test.sh
#!/bin/sh if [ $# -eq 0 ] then echo "Usage: $0 arg1 arg2..." exit 1 fi until [ $# -eq 0 ] do echo "$*" echo "first arg $1; Total $#" shift done
执行结果: $ > ./shift_test.sh 1 2 3 4 5 1 2 3 4 5 first arg 1; Total 5 2 3 4 5 first arg 2; Total 4 3 4 5 first arg 3; Total 3 4 5 first arg 4; Total 2 5 first arg 5; Total 1
Shift 命令还有另外一个重要用途, Bsh 定义了9个位置变量,从 $1 到 $9,这并不意味着用户在命令行只能使用9个参数,借助 shift 命令可以访问多于9个的参数。
Shift 命令一次移动参数的个数由其所带的参数指定。例如当 shell 程序处理完前九个命令行参数后,可以使用 shift 9 命令把 $10 移到 $1。