2014-02-10 140 views
1

我正在寫一個非常簡單的腳本,它將與我的git存儲庫進行交互,但我已經達到了一個要點,我無法弄清楚爲什麼會發生以下情況。rm向變量添加額外的反斜槓

具有:

destPath='~/Dropbox/Shared/Alex\&Stuff' 
destFile='file.zip' 

#git archive --format zip --output $destFile master 

echo $destPath/$destFile 

rm $destPath/$destFile 

回波輸出正確的路徑:

〜/升降梭箱/共享/亞歷\ &東西/ file.zip

但是RM失敗具有以下內容:

rm: cannot remove ‘~/Dropbox/Shared/Alex\\&Stuff/file.zip’: No such file or directory

那麼,爲什麼在執行rm時添加了額外的反斜槓? Alex\\$Stuff而不是Alex\$Stuff

回答

7

波形符必須被expnded外報價:

destPath=~/Dropbox/Shared/Alex\&Stuff 

destFile='file.zip' 

#git archive --format zip --output $destFile master 

echo "$destPath/$destFile" 

rm "$destPath/$destFile" 
+0

愚蠢的錯誤,一如既往。謝謝 – Alex

+1

不客氣,很高興它的工作。我在代碼中多次犯過類似的錯誤,然後花費數小時來調試它。 – anubhava

1

嘗試

destPath="$HOME/Dropbox/Shared/Alex\&Stuff" 

Tildas並不總是擴大到$ HOME。而&符號不需要反斜槓,除非你想要一個實際的反斜槓。對於雙反斜槓,我猜想這就是rm引用其內部字符串的方式(即反斜槓有特殊含義,並且單個反斜槓需要寫成'\' - C就是這樣寫的,例如)

+1

對不起,這不是一個猜謎遊戲。要麼你知道答案,要麼你不知道答案。如果你不這樣做,請發表評論。 – arkascha

+0

「&符號不需要反斜槓」......在單引號內。 –

+0

它在bash中不需要雙引號內的反斜槓。只有當它沒有被引用時,它才需要一個。 – PSkocik