2017-06-06 50 views
0

這SED的作品,以取代在shell腳本用於Java主值:爲什麼這個'sed'在Perl中的qx()內部失敗?

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 expression #1, char 58: unterminated `s' command

從檢查,據我瞭解,錯誤發生,因爲戰略經濟對話缺少最後一個分隔符,但現在看來似乎是正確的,即:

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

誰能告訴我爲什麼這個sed未能與我使用在Perl中的qx()

+4

'$#JAVA_HOME'被視爲Perl變量(數組變量的最後一個元素的編號)。嘗試逃避它:'\ $' – toolic

+1

哦,哇!但我不能將你的評論標記爲答案?你可以改變它到一個答案,所以我可以標記它是正確的?謝謝! – user555303

+1

我加了答案。 – toolic

回答

4

$#JAVA_HOME被視爲Perl變量(數組變量的最後一個元素的編號)。轉義它:\$#JAVA_HOME

+2

但注意''use strict;''和'use warnings'會告訴你這個問題(除非你出於某種原因聲明'@ JAVA_HOME') – Sobrique