作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我试图在我的“复制”数组中用“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/
我是一名优秀的程序员,十分优秀!