почему sh .exe глотает `\` и как избежать `\`? - PullRequest
0 голосов
/ 13 февраля 2020
sh -c 'ls C:\Users\timothee'

дает:

ls: не может получить доступ 'C: Userstimothee': нет такого файла или каталога

sh -c 'ls C:\\Users\\timothee'

дает: ls: не может получить доступ 'C : Userstimothee ': Нет такого файла или каталога

эти работы:

sh -c 'ls C:\\\Users\\\timothee'
sh -c 'ls C:/Users/timothee'

но нет лучшего способа?

Я пытаюсь программно вызвать Команда shell (bash или sh) использует CreateProcess и правильно ее избегает, но странное глотание backsla sh делает это неловким. См. C пример ниже:

это лучший способ ниже, используя 6 (!) Косых черт? (моя полная программа должна была бы преобразовать ввод, например echo C:\\Users\\timothee в это: echo C:\\\\\\Users\\\\\\timothee)

ссылки:

https://github.com/vim/vim/issues/371 https://github.com/boot2docker/boot2docker-cli/issues/301

1 Ответ

1 голос
/ 13 февраля 2020

Проблема в том, что back-sla sh необходимо экранировать дважды :

  • Сначала с помощью оболочки, в которой вы вызываете команду sh
  • Затем второй раз самой командой sh.

Так что, когда вы используете командную строку

sh -c 'ls C:\\\Users\\\timothee'

, запущенная оболочка удалит один back-sla sh и передайте 'ls C:\\Users\\timothee команде sh.

Команда sh, в свою очередь, нуждается в двойном back-sla sh в своей собственной обработке и передаст C:\Users\timothee в ls команда.

...