2013-02-11 74 views
0

我想寫類似缺少匹配的報價與蘇-c在bash腳本

EXEC="sudo su -m root -c \"java Something\"" 
$EXEC & 

,但我得到以下錯誤:

Something": -c: line 0: unexpected EOF while looking for matching `"' 
Something": -c: line 1: syntax error: unexpected end of file 

如果我寫的命令行它的命令執行。如果我將它存儲在一個變量中並嘗試推斷它 - 它不會。爲什麼?

+0

試試這個:'for w in $ EXEC;做echo $ w;完成「,你會看到。 – 2013-02-11 16:15:51

+0

@Mat:不是同一個問題 - 問題是''​​在'...'中沒有意義,而\「在」...中有意義。謝謝,但我知道如何使用搜索。 – SpiKeDraGoN 2013-02-11 21:11:05

+0

@nm我沒有明白你的觀點,for-in只是將一個字符串分割成空格而沒有考慮引號,如果我在命令行中寫入命令,它就會執行,寫入命令並將它存儲在一個變量並試圖推斷它? – SpiKeDraGoN 2013-02-11 21:15:16

回答

0

試試這個:

exec="ls -l \"/a b c\"" 
$exec 

你會看到類似這樣的:

ls: cannot access "/a: No such file or directory 
ls: cannot access b: No such file or directory 
ls: cannot access c": No such file or directory 

這正好說明了問題的所在 - 那就是 - 變量的擴張完成後分裂。

要使其工作,你可以使用eval:

=$ eval "$exec" 
ls: cannot access /a b c: No such file or directory 

甚至:

=$ sh -c "$exec" 

或者更好的是,不要讓這樣的命令來運行。不知道它的目的是什麼,但考慮避免在變量中構建完整的命令行。