加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

bash – 迭代并替换数组中的元素

发布时间:2020-12-15 21:49:41 所属栏目:安全 来源:网络整理
导读:我试图用“复制”数组中的“哈密瓜”替换“苹果”这个词.我现在正在做的不是抛出错误,但复制数组中没有发生任何变化. #!/bin/bashfruits=("Oranges" "Apples" "Bananas" "Grapes")echo "Original list:"echo "${fruits[@]}"copy=("${fruits[@]}")for i in ${
我试图用“复制”数组中的“哈密瓜”替换“苹果”这个词.我现在正在做的不是抛出错误,但复制数组中没有发生任何变化.

#!/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

应该解决你的问题.

“${!copy [@]}”中i的构造; do用于循环,数组的索引从0开始到数组的大小,这使您可以替换索引中找到所需字符串的元素.

在使用任何一种数组迭代方法时,扩展答案以指出差异.

循环指数

for i in "${!copy[@]}"; do 
  printf "%st%sn" "$i" "${copy[$i]}"
done

版画

0       Oranges
1       Apples
2       Bananas
3       Grapes

和钥匙

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

生产,

Oranges
Apples
Bananas
Grapes

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读