我试图用"复制"数组中的"哈密瓜"替换"苹果"这个词.我现在正在做的不是抛出错误,但复制数组中没有发生任何变化.
#!/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[@]}"
Run Code Online (Sandbox Code Playgroud)
我的输出:
Original list:
Oranges Apples Bananas Grapes
Copied list:
Oranges Apples Bananas Grapes
Run Code Online (Sandbox Code Playgroud)
在您的原始方法中,您循环遍历数组中的键,您将无法获取要替换的元素的索引.
您需要更改以修改逻辑以循环遍历数组的索引
for i in "${!copy[@]}"; do
if [[ ${copy[$i]} == "Apples" ]]; then
copy[$i]="Canteloupe"
fi
done
Run Code Online (Sandbox Code Playgroud)
应该解决你的问题.
该构造for i in "${!copy[@]}"; do用于循环,其中数组的索引从数组的0大小开始到数组的大小,这使您可以替换索引中找到所需字符串的元素.
在使用任何一种数组迭代方法时,扩展答案以指出差异.
循环指数
for i in "${!copy[@]}"; do
printf "%s\t%s\n" "$i" "${copy[$i]}"
done
Run Code Online (Sandbox Code Playgroud)
版画
0 Oranges
1 Apples
2 Bananas
3 Grapes
Run Code Online (Sandbox Code Playgroud)
和钥匙
for i in "${copy[@]}"; do
printf "%s\n" "$i"
done
Run Code Online (Sandbox Code Playgroud)
生产,
Oranges
Apples
Bananas
Grapes
Run Code Online (Sandbox Code Playgroud)