程序化地循环浏览给脚本或函数的参数。

问题描述 投票:0回答:1

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

我知道,我可以通过使用 $#,以及使用 $@当然,还有 echo $1 $2printf '%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}"

这些都不能用

有什么办法可以改善这个问题,并得到我需要的输出?

bash arguments command-line-arguments
1个回答
4
投票

似乎你想打印每一个其他的参数。这里有一些方法可以做到这一点。

我最喜欢的(尽管有点黑客化)。

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

© www.soinside.com 2019 - 2024. All rights reserved.