以编程方式循环访问提供给脚本或函数的参数



我正在尝试循环浏览提供给bash脚本(或其中的函数(的未知数量的参数,以不同的方式有效地处理赔率($1$3等(和偶数($2$4等(。

我知道我可以使用$#获得参数的数量,以及使用$@的参数本身,当然echo $1 $2printf '%sn' "$1"两者都有效。 我需要做的是有效地用未知数字回显echo $1 $3 $5 ...赔率,然后分别处理偶数,并单独计算这些字符,因此如果可能的话,需要以编程方式获取这些字符。

注意:某些输入将具有空格,但其中始终带有引号。 一个例子是1 "This one" "Another one" "and another" "last one".

我已经尝试过(这些只是为了简洁起见获得输出(:

$@放入自身的数组中,无论是 for 还是 while 排列(理解这个零会索引数组(:

indexedarray="$@"
for i in {0..$#..2}; do #This in itself creates an error ({0..5..2}: syntax error: operand expected (error token is "{0..5..2}")).
echo -n "${indexedarray[$i]}
done

这将产生空输出:

i=0
while [ $i -lt $# ]; do
echo ${INDEXEDARRAY[i]}
((i+2))
done

以及 for 或 while 循环内部(有点(明显的缺点:

echo "${$@[$i]}"
echo $"${i}"

这些都不起作用。

关于如何改进这一点并获得我需要的输出的任何想法?

似乎您想打印所有其他参数。这里有一些方法可以做到这一点。

我最喜欢的(尽管有点笨拙(:

printf '%sn%.0s' "$@"

下一个逻辑方法

while (($# > 0)); do
echo "$1"
shift
shift
# `shift 2` won't shift if there is only one argument left
done

和最通用的方法

a=("$@")
for ((i=0; i<$#; i+=2)); do
echo "${a[i]}"
done

最新更新