为什么这个'sed'在Perl中的qx()中失败了?

时间:2017-06-06 23:31:09

标签: perl sed

这个sed很有用,可以在shell脚本中替换Java home的值:

sed -i 's#^JAVA_HOME=.*$#JAVA_HOME="/usr/lib/jvm/java-1.7.0-oracle.x86_64"#' /apps/tempbsu.sh

但现在我尝试使用sed在Perl应用中使用/调用qx()

qx(sed -i 's#^JAVA_HOME=.*$#JAVA_HOME="/usr/lib/jvm/java-1.7.0-oracle.x86_64"#' /apps/tempbsu.sh);

当我这样做时,我收到一个错误:

  

sed:-e表达式#1,字符58:未终止的's'命令

从检查中,我发现错误正在发生,因为sed缺少最后一个分隔符,但它似乎是正确的,即:

sed -i 's#.....#.......#' /apps/tempbssu.sh

有人可以告诉我为什么sed因为我在Perl的qx()中使用而失败了吗?

1 个答案:

答案 0 :(得分:4)

$#JAVA_HOME被视为Perl变量(数组变量的最后一个元素的编号)。逃脱它:\$#JAVA_HOME