2017-04-14 128 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 "…"该命令。