迭代跳过第一个参数

时间:2010-08-26 13:56:43

标签: bash

您好我有以下内容:

bash_script parm1 a b c d ..n

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

5 个答案:

答案 0 :(得分:116)

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

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

$@是所有命令行参数的数组,${@:2}是与第一个元素相同的数组。双引号确保正确的空格处理。

答案 1 :(得分:27)

这应该这样做:

#ignore first parm1
shift

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

答案 2 :(得分:9)

此方法将保留第一个参数,以防您以后再使用

#!/bin/bash

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

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

答案 3 :(得分:7)

另一种味道,有点短,保留了参数列表

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

答案 4 :(得分:7)

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

shift
for arg
do
    something_with $arg
done

如您所见,您不必在"$@"声明中加入for