如何呼应循环参数在bash

问题描述:

我应该以这种方式运行的bash:如何呼应循环参数在bash

./script.sh <arg1> <arg2> <arg3>...<argn> 

我想表明我的bash这些ARGS:

<arg3> <arg4> ... <argn> 

所以我写了这个bash:

for ((i=1; i<=$#-3; i++)) 
do 
    echo $((3+i)) 
done 

但它显示了我参数的数量。

我怎样才能把#为了看到我的真正的参数?

感谢

+3

http://mywiki.wooledge.org/XyProblem –

您可以将所有参数的BASH数组,然后使用它们用于以后的处理:

args=("[email protected]") 
for ((i=2; i<${#args[@]}; i++)) 
do 
    echo "arg # $((i+1)) :: ${args[$i]}" 
done 

我喜欢@存储阵列中的参数的anubhava的解决方案,而是为了让自己的原始代码的工作,你可以使用eval

for ((i=1;i<=$#;i++)); do 
    eval echo "\$$i" 
done 
+0

请编辑你的答案在我的表单中..不止你 – MLSC

+0

你的意思是用C风格的循环? –

+0

与c风格和'-3',我写了..谢谢你,我的问题是:'回声$((3 + i))' – MLSC

一个最小的解决方案,显示所需的参数,而不数学:

shift 2 
for word 
do 
    echo ${word} 
done 

如果你想显示的参数,从参数3开始,你可以简单地使用

echo "${@:3}" # OR 
printf "%s\n" "${@:3}" 

如果你真的想显示的参数指标,使用

for ((i=3; i < $#; i++)); do 
    echo $i 
done 
+0

您的答案是最好的,但在我的线程中没有结果... – MLSC

所有好的答案后我发现这个解决方案适用于我的线程:

ARG=($(echo "${@:3}")) 
for ((i=1; i<=$#-3; i++)) 
do 
    echo ${ARG[i]} 
done 
+1

如果您接受另一个答案,则无需发布单独的答案。 – chepner

+0

这是一个很好的答案..也是为了认识我放的人 – MLSC