2010-04-08 90 views
0

我對bash頗爲陌生,不知何故,只是還沒有發現我在做什麼錯在這裏: (這是一個小的bash腳本調用我的發電機)如何讓bash在輸出中插入'

if [ -n $folder ]; then 
     $zorbalocation -q $generator -f -e files=\"$lFiles\" -e folder=\"lFolder\" 
    else 
     $zorbalocation -q $generator -f -e files=\"$lFiles\" -e folder=\".\" 
    fi 

現在,顯然我想bash執行這些命令,具體取決於文件夾的內容。 但是,出於某種原因,bash將堅持把周圍的文件= ...和文件夾的單引號(')= ... 所以,它試圖執行的

../../../zorba/build/bin/zorba -q generator.xq -f -e 'files="test.xqlib"' -e 'folder="."' 

代替

../../../zorba/build/bin/zorba -q generator.xq -f -e files="test.xqlib" -e folder="." 

有人知道爲什麼bash堅持在那裏插入撇號嗎?

一個不錯的一天,大家

丹尼

回答

0

只要他們不需要進一步的解釋(例如變量擴展),把周圍的參數或命令名稱單引號不應該是bash的一個問題。

+0

問題是,我試圖用這個命令調用一個程序,並且bash將單引號放在文件= \「$ lFiles \」 之間,它被作爲參數傳遞給被調用的程序,如果它有單引號,請參考這個論點。 – user311707 2010-04-08 08:43:45

+0

你會得到什麼錯誤? – mouviciel 2010-04-08 08:52:09

+0

那麼,錯誤是特定於我打電話的程序(zorba),它將被稱爲 zorba -q file.xq -f -e files =「...」-e folder =「.. 「 但是,由於莫名其妙的原因,bash調用 zorba -q file.xq -f -e'files =」...「'-e'folder =」...「 這使得zorba無法正確識別參數... (我使用set -x來查看真正叫什麼) – user311707 2010-04-08 09:08:38

0

echo放在您的聲明中,看看他們是否你期望的。另外,儘量不要使用這些雙引號。

if [ -n $folder ]; then 
    echo $zorbalocation -q $generator -f -e files="$lFiles" -e folder="lFolder" 
else 
    echo $zorbalocation -q $generator -f -e files="$lFiles" -e folder="." 
fi 

否則,顯示在執行此部分

+0

好吧,事先並沒有太多的東西,實際上只是命令中使用的變量被適當地填充了,真正令人費解的是,使用echo時,不會添加撇號,但是當我將它作爲命令離開時是... 如果我忽略了逃避雙重quoutes,那麼他們就不會出現在命令中......(我使用set -x來查看真正執行的) – user311707 2010-04-08 09:05:36

1

擊不加'來執行該命令之前,你的代碼的其餘部分。在運行bash -xset -x時,您只能看到報價;然後bash會嘗試打印出它運行的命令,並且會很有幫助,如果你想將它們粘貼回bash中,它會引用需要引用的標記,因此a="b"將變爲'a="b"'。你的問題一定是別的。

+0

非常感謝Killian Foth,這很有幫助,至少我現在知道這個問題肯定不在哪裏。 – user311707 2010-04-08 09:57:26

0

現在一切都清除了,似乎通過使用eval命令一切正常。 感謝這裏的所有人的幫助。