英文:
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=("${a[@]}")
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 "${!a[@]}" ; do
b=("${a[@]:0:index}")
# This should be "${a[@]:index+1:${#a[@]}-index-1}",
# but the result is the same.
b+=("${a[@]:index+1:${#a[@]}}")
echo "${b[@]}"
done
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论