您好我有以下内容:
bash_script parm1 a b c d ..n
我想迭代并打印命令行中的所有值,从a开始,而不是从parm1开始
答案 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
。