gpt4 book ai didi

bash - 遍历并替换数组中的元素

转载 作者:行者123 更新时间:2023-11-29 08:53:15 25 4
gpt4 key购买 nike

我试图在我的“复制”数组中用“Cantaloupe”替换“Apples”这个词。我现在所做的不是抛出错误,而是复制数组没有发生任何变化。

#!/bin/bash

fruits=("Oranges" "Apples" "Bananas" "Grapes")
echo "Original list:"
echo "${fruits[@]}"

copy=("${fruits[@]}")

for i in ${copy[@]}
do
if [[ copy[$i] == "Apples" ]]; then
copy[$i]="Canteloupe"
fi
done

echo "Copied list:"
echo "${copy[@]}"

我的输出:

Original list:
Oranges Apples Bananas Grapes
Copied list:
Oranges Apples Bananas Grapes

最佳答案

在您原来的方法中,您将遍历数组中的 ,使用这些键您将无法获取要替换的元素的索引。

您需要更改以修改逻辑以遍历数组的索引作为

for i in "${!copy[@]}"; do
if [[ ${copy[$i]} == "Apples" ]]; then
copy[$i]="Canteloupe"
fi
done

应该可以解决您的问题。

构造 for i in "${!copy[@]}"; do 用于使用从 0 开始到数组大小的数组索引进行循环,这样您就可以在找到所需字符串的位置替换索引中的元素。


扩展答案以指出使用任一数组迭代方式时的区别。

遍历索引

for i in "${!copy[@]}"; do 
printf "%s\t%s\n" "$i" "${copy[$i]}"
done

打印

0       Oranges
1 Apples
2 Bananas
3 Grapes

和按键

for i in "${copy[@]}"; do 
printf "%s\n" "$i"
done

产生,

Oranges
Apples
Bananas
Grapes

关于bash - 遍历并替换数组中的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45207167/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com