在bash中迭代关联数组

时间:2016-02-18 11:59:06

标签: bash shell for-loop

我使用关联数组递归重命名字符串。当我回显$index&时,数组部分正在工作${code_names[$index]}他们正确打印。但是文件未被修改。当我在shell中运行find | sed命令时,它可以在bash脚本中运行,但它不会。

更新

如果我只是对要重命名的字符串进行硬编码,那么脚本运行正常:find . -name $file_type -print0 | xargs -0 sed -i 's/TEST/BAT/g'

#!/usr/bin/env bash
dir=$(pwd)
base=$dir"/../../new/repo"
file_type="*Kconfig"
cd $base

declare -A code_names
code_names[TEST]=BAT
code_names[FUGT]=BLANK

for index in "${!code_names[@]}" 
do
    find . -name $file_type -print0 | xargs -0 sed -i 's/$index/${code_names[$index]}/g'
done

1 个答案:

答案 0 :(得分:2)

裸变量$ file_type由shell扩展。双引它。变量不会在单引号中展开,而是使用双引号。请注意,如果$index${code_names[$index]}包含对sed具有特殊含义的字符(如/),则可能会中断。

find . -name "$file_type" -print0 \
| xargs -0 sed -i "s/$index/${code_names[$index]}/g"