Рубиновая Windows с командной строкой

Ruby делает опрятный трюк с командной строкой в ​​Windows – он делает свое собственное подтачивание (расширение имени файла). Это связано с тем, что ни cmd.exe, ни Powershell (Edit – WRONG, см. Ниже) не делают глобусы, как оболочки UNIX (bash, korn и т. Д.).

Я просматривал исходный код win32\win32.c и я нахожу, что он делает магические вещи с кавычками. Windows cmd.exe распознает только двойные кавычки, но Ruby также выделяет одинарные кавычки.

Скажем, я пишу простой grep для Windows. Я хочу передать RE как первый аргумент, затем список файлов:

 pattern = ARGV.shift puts pattern puts ARGV 

Вот несколько экспериментов с командной строкой:

 C:\>grep.rb u* u* utf8file.txt utf8file.txt C:\>grep.rb "u*" u* utf8file.txt utf8file.txt C:\>grep.rb 'u*' u* u* utf8file.txt 

Замечательно! Просто хочу, я хочу. Так в чем проблема?

Где все это задокументировано? То, что я НЕ хочу делать, – это написать код, который зависит от какого-то причудливого поведения, которое, как мне кажется, будет испорчено в следующей версии. Я хочу убедиться, что это полностью поддерживаемая функция продукта, а не какой-то побочный эффект нечетного шара, который просто срабатывает.

Судя по связанным вопросам и их ответам на переполнение стека (и в других местах), эта функция, кажется, мало известна.

Есть идеи?

Редактировать: следующие комментарии от @Patru Я попробовал это на Powershell:

 PS C:\> ruby grep.rb 'u*' u* utf8file.txt utf8file.txt PS C:\> ruby grep.rb "u*" u* utf8file.txt utf8file.txt PS C:\> ruby grep.rb ''u*'' u* utf8file.txt utf8file.txt PS C:\> ruby grep.rb `'u*`' u* u* utf8file.txt 

Этот последний взломал его. «Побег» одинарные кавычки с использованием обратного хода. Вы могли бы сказать, что если вы используете Powershell, вы получаете то, что заслуживаете. 😉