我试图循环浏览一个未知数量的参数给一个bash脚本(或其中的函数),以有效地处理赔率($1
, $3
等)和偶数($2
, $4
等)的不同方式。
我知道,我可以通过使用 $#
,以及使用 $@
当然,还有 echo $1 $2
或 printf '%s\n' "$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 '%s\n%.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