bash脚本中的sed工作不正常:但它可以在命令行上运行

时间:2012-01-11 21:43:30

标签: bash scripting sed

我在命令行上尝试过以下操作,但是当我将它们放在bash脚本中时出现错误(见下文):

sed -e "s/INSERT_ME_HERE/"${ROOT_BUILD_HOME}"/g" ./Doxyfile > ./tmp && mv ./tmp ./Doxyfile
sed -e "s/INSERT_ME_HERE/'${ROOT_BUILD_HOME}'/g" ./Doxyfile > ./tmp && mv ./tmp ./Doxyfile
sed -e "s/INSERT_ME_HERE/`echo ${ROOT_BUILD_HOME}`/g" ./Doxyfile > ./tmp && mv ./tmp ./Doxyfile

我得到的错误是:

sed: -e expression #1, char 19: unknown option to `s'

但是就像我说的那样,我从命令行使用它并且它可以工作:

[mehoggan@hogganz400 Doxygen]$ ROOT_BUILD_HOME=MONKEY; sed -e "s/INSERT_ME_HERE/`echo ${ROOT_BUILD_HOME}`/g" ./Doxyfile | grep MONKEY
INPUT                  = MONKEY

为什么它在一个案例而不是另一个案件中有效?

同样设置ROOT_BUILD_HOME,我在shell脚本中的sed表达式之前回显它。

echo `date`: "Going to run doxygen on source and move to ${ROOT_BUILD_HOME}";

2 个答案:

答案 0 :(得分:5)

我猜测ROOT_BUILD_HOME/开头,sed正在解释为替换字符串。我对吗?如果是这样,那么尝试使用不同的分隔符:

sed -e "s#INSERT_ME_HERE#${ROOT_BUILD_HOME}#g" ./Doxyfile > ./tmp && mv ./tmp ./Doxyfile

答案 1 :(得分:1)

#!/bin/bash

ABC=`echo ${ROOT_BUILD_HOME}`
echo $ABC
sed -e 's/INSERT_ME_HERE/'$ABC'/g' <./Doxyfile > ./tmp && mv ./tmp ./Doxyfile

希望这会有所帮助