1

我正在尝试设置一个Git别名,该别名必须将反斜杠转换为正斜杠,以便稍后将其传递给filter-branch命令(因为我使用Posh并将DOS基于文件路径作为参数传递,所以需要)。

所以我有这个别名:

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

但我得到这个错误:

tr:警告:字符串末尾的未转义反斜杠不可移植

我试着tr '\\\\' '/'在里面写,认为它Git只是逃避\bash得到一个\,但我得到了同样的错误。

有任何想法吗?

4

2 回答 2

2

你需要在这里写 8 个反斜杠,因为字符串会被转义 3 次。

echo-test = "!f() { path=$(echo $1 | tr '\\\\\\\\' '/'); echo $path; }; f"
  1. 第一次翻倍是由于trOP 已经使用。
  2. 第二次翻倍是由于格式.gitconfig

    在双引号内,必须对双引号"和反斜杠\字符进行转义:使用\"for"\\for \

  3. 第三次翻倍是由于使用sh -c "…".

于 2017-04-14T19:46:05.390 回答
0

我知道问题是关于tr但这是一个等效的选择。

如果您可以编写|tr ...命令,
那么使用|sed -r 's"[\]"/"g'.

我希望我总是可以避免使用\\\\\\\\\\\...我永远不会习惯它。

于 2021-09-18T03:50:03.153 回答