globbing should be prevented when wildcard is surrounded by double quotes in the ruby's command line
script tt like following:
#!/usr/bin/ruby p ARGV
if a command line argument contains wildcard such as * or ? is surrounded by double quotes , the script's results are different between Linux and Windows.
when run tt in Linux's bash :
$ ./tt ".txt"
it's output is : [".txt"]
but when run tt in Windows 10(x64)'s Command Prompter cmd.exe :
c:> ruby tt.rb "*.exe"
it's output is ["a.txt" , "b.txt" , "c.txt"]
I know , If enclosed with single quote, the behavior are same in Linux and Windows.
I think it's behavior should be exactly same whenever any OS or Shell . otherwise it will bring many trouble to developers , think of the following scene：
users maybe pass asterisk(*) in the command line arguments to my script , to prevent bash to expand it , I will request users to enclose this parameter with double quotes, this will work fine in Linux . but when it 's run in windows , it will fail .
Bash will expand wildcard with globbing before passing the arguments to ruby process , the function w32_cmdvector in win32/win32.c does the same thing like Bash, Just add a condition , the bug will be fixed.
--- win32/win32.c (revision 64922)
+++ win32/win32.c (working copy)
@@ -1733,7 +1733,7 @@
// N.B. Don't glob if inside a single quoted string
- if (quote != L'\'')
- if (quote != L'\'' && quote != L'"') globbing++; slashes = 0; break;
#1 [ruby-core:89283] Updated by LeiYuhou (Yuhou Lei) 2 months ago
sorry, maybe some text was modified by the bug tracker Editor :-)
In Linux's bash
$ ./tt "*.txt" it's output is : ["*.txt"]
my patch's content:
Index: win32/win32.c =================================================================== --- win32/win32.c (revision 64922) +++ win32/win32.c (working copy) @@ -1733,7 +1733,7 @@ // N.B. Don't glob if inside a single quoted string // - if (quote != L'\'') + if (quote != L'\'' && quote != L'"') globbing++; slashes = 0; break;