所以我构建了一个超级简单的脚本,允许我搜索相对于运行脚本的所有目录,它将找到第一个参数并将其替换为第二个参数:
#!/usr/local/bin/bash -f
word_to_look_for=$1
substitue=$2
find ./ type f -exec sed -i "" "s/$word_to_look_for/$substitute/g" {} \;
echo "Replaced ($word_to_look_for) with ($substitue)"
出于某种原因,这个位 - > "s/$word_to_look_for/$substitute/g"
只会输出为s/wordImlookingfor//g
,因此sed会将其替换为空文本,以使其按预期工作我已将脚本更改为以下内容:
sed_arg="s/$word_to_look_for"
sed_arg="$sed_arg/$substitue/g"
find ./ type f -exec sed -i "" "$sed_arg" {} \;
echo "Replaced ($word_to_look_for) with ($substitue)"
我只是想知道,为什么bash似乎不喜欢我在第一个版本中使用它的方式?
答案 0 :(得分:1)
除了一个地方之外,你在substitute
处拼错了substitue
:
"s/$word_to_look_for/$substitute/g"
所以bash扩展了从未设置的变量$substitute
,而另一个变量($substitue
)已设置但从未使用过。