Actions
Bug #10055
closedShellwords.shellsplit() does not match POSIX sh behavior for backslashes within double-quoted strings
Description
In POSIX sh, the following commands are identical:
printf '%s\n' hello world
printf "%s\n" hello world
However, Shellwords.shellsplit() parses them differently:
head :001 > require 'shellwords'
=> true
head :002 > Shellwords.shellsplit(%q|printf "%s\\n"|)
=> ["printf", "%sn"]
head :003 > Shellwords.shellsplit(%q|printf '%s\\n'|)
=> ["printf", "%s\\n"]
The documentation for the shellwords module claims that its parser is compatible with Bourne; however, it does not match either this 1970s-era shell language or modern POSIX sh (which is the actual specification used for /bin/sh on modern systems, and incompatible in some respects with original Bourne), both of which preserve backslashes in this context.
Updated by zzak (zzak _) over 10 years ago
- Status changed from Open to Assigned
- Assignee set to knu (Akinori MUSHA)
- Target version set to 2.2.0
knu: do you have any thoughts on this one?
Updated by knu (Akinori MUSHA) about 8 years ago
- Status changed from Assigned to Closed
Applied in changeset r56573.
Fix the handling of the backslash in double quotes
- lib/shellwords.rb (Shellwords#shellsplit): Fix the handling of
the backslash in double quotes to conform to the standard.
[ruby-core:63807] [Bug #10055]
Updated by knu (Akinori MUSHA) about 8 years ago
That is correct! I've fixed the implementation to conform to the standard.
Actions
Like0
Like0Like0Like0