shift

将位置参数向左移动n,

语法

  shift [n]

选项

n  :要移位的参数个数(默认 = 1)

除非n大于$#或小于零,否则返回状态为零。

shift是一个bash内置命令。

例子

1.假设有test1.sh,内容如下:

until [ $# -eq 0 ]
do
echo "第一个参数为: $1 参数个数为: $#"
shift
done

执行以上程序test1.sh:

$ ./test1.sh 1 2 3 4

输出

第一个参数为: 1 参数个数为: 4
第一个参数为: 2 参数个数为: 3
第一个参数为: 3 参数个数为: 2
第一个参数为: 4 参数个数为: 1

从上可知 shift 命令每执行一次,变量的个数($#)减一,而变量值提前一位,下面代码用 until 和 shift 命令计算所有命令行参数的和

2.修改test1.sh

 if [ $# -eq 0 ]
 then
 echo "test1.sh 参数"
 exit 1
 fi
 sum=0
 until [ $# -eq 0 ]
 do
 sum=`expr $sum + $1`
 shift
 done
 echo "sum is: $sum

执行test1.sh:

$ ./test1.sh 10 20 15

输出

45

Shift 命令还有另外一个重要用途, Bash 定义了9个位置变量,从 $1 到 $9,这并不意味着用户在命令行只能使用9个参数,借助 shift 命令可以访问多于9个的参数。
Shift 命令一次移动参数的个数由其所带的参数指定。例如当 shell 程序处理完前九个命令行参数后,可以使用 shift 9 命令把 $10 移到 $1。

shift 命令实例:

Linux的Bash命令行(A-Z排序)