使用bash脚本进行文件参数的奇怪行为

时间:2017-10-06 08:40:19

标签: bash

所以我构建了一个超级简单的脚本,允许我搜索相对于运行脚本的所有目录,它将找到第一个参数并将其替换为第二个参数:

#!/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似乎不喜欢我在第一个版本中使用它的方式?

1 个答案:

答案 0 :(得分:1)

除了一个地方之外,你在substitute处拼错了substitue

"s/$word_to_look_for/$substitute/g"

所以bash扩展了从未设置的变量$substitute,而另一个变量($substitue)已设置但从未使用过。