2011-04-28 110 views
18

我正在面對windows下的MinGW shell中的下一個問題。我在我的/etc/profile下一個表達式:帶空格的變量變量

export GIT_SSH="/c/Program Files/TortoiseGit/bin/TortoisePlink.exe" 

當我使用git在本地存儲庫中取出這不起作用。但是,如果我不喜歡它(老的DOS方式)這個工作原理:

export GIT_SSH="/c/Progra~1/TortoiseGit/bin/TortoisePlink.exe" 

我的問題是:

我怎樣才能使它工作在使用可變空間?

出於測試目的,你可以模擬這樣的事情(例如任何好):

export VAR="/c/Program Files/TortoiseGit/bin/TortoisePlink.exe" 
# and try to execute like this 
$VAR 

是否有一個解決方案(除了前面提到的)?

任何鏈接/提示表示讚賞。

感謝,

尤利安

+0

當您嘗試'/ C會發生什麼/ Program \ Files/TortoiseGit/bin/TortoisePlink.exe'?也就是說,包含一個反斜槓以逃避空間。如下所示 - – chrisaycock 2011-04-28 13:35:15

+0

- 它不起作用 – INS 2011-04-28 13:40:06

+0

@chrisaycock:我也被迷惑了,但這只是避免導出命令參數中的雙引號的一種方式。之後,這個字符串以相同的方式處理,空格仍然是空格:-) – 2011-04-28 14:08:27

回答

37

執行這樣的:"$VAR"。這是shell腳本中最重要的問題之一,因爲字符串總是被字面替換,並且任何包含的空格都被視爲令牌分隔符而不是字符串中的字符。考慮將變量替換爲運行時粘貼的一種代碼。

當您編寫$VAR時會發生什麼情況是,shell嘗試使用第一個參數Files/TortoiseGit/bin/TortoisePlink.exe執行二進制/c/Program

我通過在特定輸入的大型shell腳本中獲取奇怪的語法錯誤,學會了這一難題。如果運行時輸入包含特殊字符,我能想到的其他語言可能會抱怨語法錯誤 - 但這是shell腳本的本質,因爲像bash和sh這樣的命令解釋程序會逐行解釋代碼。

無論何時您希望某個字符串包含空格並且您不想將其視爲單獨的標記,請將其用雙引號引起來。

+0

@Iulian:那麼你沒有別的辦法,只能改變另一個腳本......或者沒有空格。 Git最初是爲類Unix操作系統設計的,而具有空格的路徑不符合其慣例。 – 2011-04-28 13:49:25

+5

如果git在不引用的情況下調用它,那麼它就是GIT bug,應該報告。 – 2011-04-28 14:30:18

7

作爲參考,我通過使用轉義引用封裝參數來解決了osx上的類似問題。這可能不是最好的解決方案,但它似乎工作。

alias sub="\"/Applications/Sublime Text 2.app/Contents/SharedSupport/bin/subl\"" 
-1

我已經解決了它的最簡單的方法:

出口GIT_SSH = 6/C /程序\文件/ TortoiseGit /斌/ TortoisePlink.exe

+1

雖然技術上可行,但如果你解釋你做了什麼,你可能會得到upvotes(而不是downvotes)。有人爲此苦苦掙扎,無法理解你給出的意義。 – zaTricky 2017-11-20 08:28:28