设置一个 Git 别名,使用 TR 将反斜杠转换为正斜杠
Setting a Git alias which uses TR to translate backslash into forward slash
我正在尝试设置一个 Git
别名,它必须将反斜杠转换为正斜杠,以便稍后将其传递给 filter-branch
命令(因为我使用 Posh
并将传递基于 DOS
的文件路径作为参数)。
所以我有这个别名:
echo-test = "!f() { path=$(echo | tr '\' '/'); echo $path; }; f"
但是我得到这个错误:
tr: warning: an unescaped backslash at end of string is not portable
我试着在里面写 tr '\\' '/'
,认为 Git
只是转义了 \
而 bash
得到了一个 \
,但我得到了相同的结果错误。
有什么想法吗?
这里需要写8个反斜杠,因为字符串会被反转义3次
echo-test = "!f() { path=$(echo | tr '\\\\' '/'); echo $path; }; f"
- 第一次加倍是由于
tr
因为 OP 已经使用了。
第二次翻倍是由于format of .gitconfig
Inside double quotes, double quote "
and backslash \
characters must be escaped: use \"
for "
and \
for \
.
第三次翻倍是因为使用sh -c "…"
执行了命令。
我知道问题是关于 tr
但这是一个等效的替代方案。
如果你能写出 |tr ...
命令,
使用 |sed -r 's"[\]"/"g'
.
更清楚(更少混淆)
我希望我能一直避免使用\\\\\\...
我永远不会习惯它
我正在尝试设置一个 Git
别名,它必须将反斜杠转换为正斜杠,以便稍后将其传递给 filter-branch
命令(因为我使用 Posh
并将传递基于 DOS
的文件路径作为参数)。
所以我有这个别名:
echo-test = "!f() { path=$(echo | tr '\' '/'); echo $path; }; f"
但是我得到这个错误:
tr: warning: an unescaped backslash at end of string is not portable
我试着在里面写 tr '\\' '/'
,认为 Git
只是转义了 \
而 bash
得到了一个 \
,但我得到了相同的结果错误。
有什么想法吗?
这里需要写8个反斜杠,因为字符串会被反转义3次
echo-test = "!f() { path=$(echo | tr '\\\\' '/'); echo $path; }; f"
- 第一次加倍是由于
tr
因为 OP 已经使用了。 第二次翻倍是由于format of
.gitconfig
Inside double quotes, double quote
"
and backslash\
characters must be escaped: use\"
for"
and\
for\
.第三次翻倍是因为使用
sh -c "…"
执行了命令。
我知道问题是关于 tr
但这是一个等效的替代方案。
如果你能写出 |tr ...
命令,
使用 |sed -r 's"[\]"/"g'
.
我希望我能一直避免使用\\\\\\...
我永远不会习惯它