From: charles@... Date: 2014-07-17T21:54:30+00:00 Subject: [ruby-core:63807] [ruby-trunk - Bug #10055] [Open] Shellwords.shellsplit() does not match POSIX sh behavior for backslashes within double-quoted strings Issue #10055 has been reported by Charles Duffy. ---------------------------------------- Bug #10055: Shellwords.shellsplit() does not match POSIX sh behavior for backslashes within double-quoted strings https://bugs.ruby-lang.org/issues/10055 * Author: Charles Duffy * Status: Open * Priority: Normal * Assignee: * Category: lib * Target version: * ruby -v: ruby 2.2.0dev (2014-07-18 trunk 46855) [x86_64-linux] * Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN ---------------------------------------- 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. -- https://bugs.ruby-lang.org/