获取bash数组中除了给定索引以外的所有元素。

huangapple go评论59阅读模式
英文:

getting all elements of a bash array except a given index

问题

团队,我有一个用例,需要在循环时将数组的余下部分保存到新数组中,新数组应该包含除了循环元素以外的所有元素。

$ a=(1 2 3 4 5)
$ b=()

for index in ${!a[@]}
do
b=(${a[@]:0:index} ${a[@]:index+1}) # 这样编写代码可以使其正常工作
echo ${b[@]}
done

每次迭代的预期循环值。

1 2 3 4
1 2 3 5
1 2 4 5
1 3 4 5
2 3 4 5


<details>
<summary>英文:</summary>

Team, I have a use case to save remainder of array into new array while looping on its indices and new array should have all elements except the looped element.


$ a=(1 2 3 4 5)
$ b=()

for index in ${!a[@]}
do
b=(a - a[$index]) #how would i code his that it works ?
echo ${b[@]}
done

expected loop values for each iteration.

1 2 3 4
1 2 3 5
1 2 4 5
1 3 4 5
2 3 4 5


</details>


# 答案1
**得分**: 2

只保留简单。

    b=("{$a[@]}")
    取消设置 b[$index]

<details>
<summary>英文:</summary>

Just be simple.

    b=(&quot;${a[@]}&quot;)
    unset b[$index]

</details>



# 答案2
**得分**: 0

```bash
#!/bin/bash
a=(1 2 3 4 5)
b=()

for index in "${!a[@]}" ; do
    b=("${a[@]:0:index}")

    # 这里应该是 "${a[@]:index+1:${#a[@]}-index-1}",
    # 但结果是相同的。
    b+=("${a[@]:index+1:${#a[@]}}")

    echo "${b[@]}"
done
英文:

Use the parameter expansion with the :offset:length syntax:

#!/bin/bash
a=(1 2 3 4 5)
b=()

for index in &quot;${!a[@]}&quot; ; do
    b=(&quot;${a[@]:0:index}&quot;)

    # This should be &quot;${a[@]:index+1:${#a[@]}-index-1}&quot;,
    # but the result is the same.
    b+=(&quot;${a[@]:index+1:${#a[@]}}&quot;)

    echo &quot;${b[@]}&quot;
done

huangapple
  • 本文由 发表于 2023年4月20日 06:48:15
  • 转载请务必保留本文链接:https://go.coder-hub.com/76059342.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定