我正在尝试循环浏览提供给bash脚本(或其中的函数(的未知数量的参数,以不同的方式有效地处理赔率($1
,$3
等(和偶数($2
,$4
等(。
我知道我可以使用$#
获得参数的数量,以及使用$@
的参数本身,当然echo $1 $2
或printf '%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