我经历了无数次SO问题和Google搜索,但找不到该问题的答案。 我有一个sed命令,该命令在我的bash脚本中运行时失败,但可以从命令行正常运行。 我知道bash一定有点怪,但是找不到。
脚本如下:
#!/bin/bash
SEARCH=$1
REPLACE=$2
FILE=$3
SED="sed -i 's~$SEARCH~$REPLACE~g' $FILE"
echo "Running $SED"
$SED
还尝试了代替最后的$SED
行:
OUT=`$SED`
echo "Command output : $OUT"
,但是当使用
调用时,两个版本都提供以下输出# vmSub 'DOMAIN' 'example' mysql.sql
Running sed -i 's~DOMAIN~example~g' mysql.sql
sed: -e expression #1, char 1: unknown command: `''
Command output :
但是复制/粘贴回显的命令有效:
# sed -i 's~DOMAIN~example~g' mysql.sql
#
搜索字符串是否在文件中都没有关系。尝试在sed命令中使用'/'作为分隔符,结果相同。 因为我只是复制/粘贴脚本回显的命令,所以我知道我通过命令行测试的内容应该与bash脚本执行的内容匹配。 还确保传递给脚本的所有选项都不包含特殊字符或空格,因此我不知道这不会引起问题。
在具有GNU bash版本4.2.46(2)-release和sed(GNU sed)4.2.2的Linux RHEL上运行的我也证实了我的交互式shell是/ bin / bash
已解决: 根据下面评论中的@thatotherguy,答案是将bash vars移到引号之外,因此代码现在显示为:
SED="sed -i 's~"$SEARCH"~"$REPLACE"~g' "$FILE
现在可以正常工作了。
感谢大家的帮助。