tr(anslate)在这里发生了什么?

sti*_*tib 0 shell applescript escaping

在AppleScript中,如果我这样做:

do shell script "echo \"G:\\CRE\\MV Studios\\Exhibition Projects\"|tr \"\\\\\" \"/\""
Run Code Online (Sandbox Code Playgroud)

我希望我的所有反斜杠都会以正斜杠的形式返回.为了使它更容易理解,tr命令看起来像这样没有所有的转义

tr "\\" "/" #there's still an escaped \ for the shell
Run Code Online (Sandbox Code Playgroud)

但我得到的是:

"G:/CRE/MV Studiosxhibition Projects"
Run Code Online (Sandbox Code Playgroud)

请注意,当我从脚本编辑器复制它时,它添加了一个奇怪的字符,其中缺少/ E应该是,它不会显示在事件日志中或一旦我发布它.显然它正在用\ E做一些奇怪的事.

关于如何应对的任何想法?

Joh*_*ica 5

它似乎echo是解释\E为转义字符(ASCII码27,ESC).您可以通过禁用echo -E转义序列解释的选项禁用此功能.

help echo我的Mac上:

echo: echo [-neE] [arg ...]
输出ARG.如果-n指定,则抑制尾随换行符.如果-e给出了该选项,则会打开以下反斜杠转义字符的解释:

    \a      alert (bell)
    \b      backspace
    \c      suppress trailing newline
    \E      escape character
    \f      form feed
    \n      new line
    \r      carriage return
    \t      horizontal tab
    \v      vertical tab
    \\      backslash
    \0nnn   the character whose ASCII code is NNN (octal).  NNN can be
            0 to 3 octal digits
Run Code Online (Sandbox Code Playgroud)

您可以使用该-E选项明确关闭上述字符的解释.