Bash阵列帮助和建议

时间:2014-07-16 15:00:08

标签: arrays bash loops while-loop shift

我有一个由以下内容组成的数组: -

d23 d3 d21 d1 d20 d0 d26 d6

我想对数组的每两个元素重复相同的操作。例如:

echo d23 d3

然后转到接下来的两个元素:

echo d21 d1

我尝试过while循环的组合并转而使用。任何帮助和建议将不胜感激。

3 个答案:

答案 0 :(得分:3)

只需循环播放:

a=(d23 d3 d21 d1 d20 d0 d26 d6)

$ echo ${#a[@]}
8

$ for (( i=0; i<${#a[@]}; i+=2 )); do echo "${a[$i]} ${a[$i+1]}"; done
d23 d3
d21 d1
d20 d0
d26 d6

答案 1 :(得分:2)

如果您已经开始使用shift注意它只适用于位置参数,那么您可以在函数中使用它:

print_pairs () {
    while [ $# -gt 0 ]; do
        echo $1 $2;
        shift 2;
    done
}

a=(d23 d3 d21 d1 d20 d0 d26 d6)
print_pairs "${a[@]}"

答案 2 :(得分:0)

带有递归的ooga's version的变体:

a=(d23 d3 d21 d1 d20 d0 d26 d6)
pp () 
{ 
  [ $# -lt 2 ] && return
  echo $1 $2
  shift 2
  pp $@
}

pp "${a[@]}"