У меня есть приложение, построенное с компилятором MinGW C++, который работает что-то вроде Grep - acommand выглядит примерно так:подстановка с MinGW на Windows,
myapp -e '.*' *.txt
где вещь, которая приходит после -e переключателя является регулярным выражением , а вещь после этого - шаблон имени файла. Кажется, что MinGW автоматически расширяет (globs в терминах UNIX) командную строку, поэтому мое регулярное выражение получает искалеченное. Я могу отключить это поведение, установив глобальную переменную _CRT_glob
равной нулю. Это будет хорошо для bash и других разумных пользователей оболочки, так как оболочка расширит шаблон файла. Однако для пользователей MS cmd.exe
мне кажется, что мне придется развернуть файл.
Так что мой вопрос - кто-нибудь знает библиотеку globbing (или объект в MinGW), чтобы сделать частично расширение командной строки? Я знаю о функции _setargv для Windows CRT, но это расширяет полную командную строку. Обратите внимание, что я видел this question, но на самом деле это не касается частичного расширения.
Я закончил использовать условную компиляцию, чтобы написать свой собственный код подстановки для Windows-версии моего приложения. Это было довольно легко, так как у меня есть собственный класс CommandLine, который инкапсулирует argc и argv из main(). Тем не менее, мне было бы интересно услышать о других решениях.
Странные, помещая кавычки вокруг вашего регулярного выражения, должны препятствовать поглаживанию. –
@Brian Это предотвращает подталкивание оболочки (скажем, bash), но bash удаляет кавычки и передает их в мое приложение, которое затем выполняет еще один раунд глотания. – 2010-06-01 15:24:46
Думаю, я не последую за этим. Если ваше приложение получает '. *' В argc/argv, то в чем проблема? –