sed在bash中不起作用,但在命令行中起作用

时间:2019-10-29 17:36:26

标签: linux bash shell sed

我经历了无数次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

现在可以正常工作了。

感谢大家的帮助。

0 个答案:

没有答案