我使用关联数组递归重命名字符串。当我回显$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
答案 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"