通过跳过第一个参数的迭代

嗨,我有以下几点:

bash_script parm1 abcd ..n 

我想迭代并打印命令行中的所有值,而不是从parm1开始

这应该做到这一点:

 #ignore first parm1 shift # iterate while test ${#} -gt 0 do echo $1 shift done 

你可以在bash中“切片”数组; 而不是使用shift ,你可以使用

 for i in ${@:2} do echo $i done 

$@是所有命令行参数的数组, ${@:2}是与第一个元素相同的数组。

这个方法会保留第一个参数,以防以后使用它

 #!/bin/bash for ((i=2;i<=$#;i++)) do echo ${!i} done 

要么

 for i in ${*:2} #or use $@ do echo $i done 

您可以对位置参数使用隐式迭代:

 shift for arg do something_with $arg done 

正如你所看到的,你不必在for语句中包含"$@"

另一个味道,有点短,保持参数列表

 shift for i in "$@" do echo $i done