2017-04-14 300 views
1

我試圖建立一個Git別名它有一個反斜槓轉換爲正斜槓以後把它傳遞給filter-branch命令(在有需要時,因爲我用Posh一個Git別名並將通過基於DOS的文件路徑作爲參數)。設置它採用TR來反斜槓轉換成正斜槓

所以我有這個別名:

echo-test = "!f() { path=$(echo $1 | tr '\\' '/'); echo $path; }; f" 

但我得到這個錯誤:

tr: warning: an unescaped backslash at end of string is not portable

我試着寫tr '\\\\' '/'內,以爲Git簡單地逃脫了\bash得到一個\,但我得到同樣的錯誤。

任何想法?

+0

您是否嘗試了8個反斜槓?'\\\\\\\''? – kennytm

+0

@kennytm,聖潔的廢話,我以爲你在逗我,但它工作!那麼發生了什麼? 3逃脫? – Gabrielius

+0

是的,所以肯定有3個轉義(一次在'tr'中),不能確定在另外兩個轉義之上,可能一次在別名定義中,一次在bash中。 – kennytm

回答

1

您需要在這裏寫8個反斜槓,因爲字符串將被非轉義三次。

echo-test = "!f() { path=$(echo $1 | tr '\\\\\\\\' '/'); echo $path; }; f" 
  1. 第一加倍是由於tr如OP已經使用。
  2. 第二加倍是由於format of .gitconfig

    Inside double quotes, double quote " and backslash \ characters must be escaped: use \" for " and \\ for \ .

  3. 第三加倍是由於執行使用sh -c "…"該命令。