Что здесь происходит с tr (anslate)? - PullRequest
0 голосов
/ 28 октября 2009

В яблочном сценарии, если я делаю:

do shell script "echo \"G:\\CRE\\MV Studios\\Exhibition Projects\"|tr \"\\\\\" \"/\""

Я ожидаю, что все мои обратные слеши вернутся как прямые. Чтобы было немного легче понять, команда tr будет выглядеть так без всех экранированных символов

tr "\\" "/" #there's still an escaped \ for the shell

Но я получаю:

"G:/CRE/MV Studiosxhibition Projects"

Обратите внимание, что когда я скопировал это из Script Editor, он добавил странный символ, где должен быть отсутствующий / E, он не отображается в журнале событий или после того, как я это опубликовал. Очевидно, он делает что-то странное с \ E.

Есть идеи, что с этим делать?

1 Ответ

5 голосов
/ 28 октября 2009

Похоже, что echo интерпретирует \E как escape-символ (код ASCII 27, ESC). Вы можете отключить это с помощью опции echo -E, чтобы отключить интерпретацию escape-последовательностей.

С 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

Вы можете явно отключить интерпретацию вышеуказанных символов с опцией -E.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...