2009-09-22 42 views
2

我正在寫一個bash腳本,在該腳本中,我運行了一個perl腳本,該腳本需要在其中包含雙引號的標誌。運行腳本通常情況下,你會跑bash腳本中的命令在標誌中的文字引號

$ perl script.pl -flag="something" -anotherflag="somethingelse" 

在我的劇本,我使用的變量在這些標誌,但想保留雙引號,所以我有這樣的:

variable=foo 
perl script.pl -flag=\"something\" -anotherflag=\"$variable\" 

時我跑bash -x myscript.sh,我看到它增加了環繞整個標誌單引號,既保持了雙引號,導致perl腳本錯誤:

perl script.pl '-flag="something"' '-anotherflag="foo"' 

我也試過eval整個事情(eval perl [...]),它完全刪除了雙引號。我怎樣才能讓Bash運行帶雙引號的腳本?

+0

我不明白 - 「試圖運行」中的雙引號是非常完整的,並且一個主要的短跑似乎已經神祕地消失了(也許是一個錯字?) - 你能更好地解釋你有什麼問題嗎? ?順便說一句,什麼是$變量,如果不是varoutput? – 2009-09-22 02:10:54

+0

領先的破折號是一個錯字。固定。 – 2009-09-22 02:13:43

回答

0

你說...:

Running the script normally, you would run

$ perl script.pl -flag="something" -anotherflag="somethingelse"

...但隨後在$提示符下運行外殼將消除":Perl的腳本將永遠不會看到它們(他們剛剛已經打出了自己的角色防止空格以及特殊字符(例如'>','<','|等等)在其內部被解釋 - 這些空格和/或特殊字符將僅作爲參數的一部分被傳遞)。用你給他們的價值觀(沒有空格,沒有特別之處),那些雙引號是完全沒有用的,它完全沒有區別。

無論如何,如果這確實是你想要的效果,只是做在你的bash腳本:

perl script.pl -flag="something" -anotherflag="$variable" 

(或省略雙引號 - 這絕對是漠然各地something,淡然各地$variable如果在你的例子只是foo,但不是在所有情況下)。