in reply to Problems with String::ShellQuote

Remember that statement in String::ShellQuote?

shell_quote quotes strings so they can be passed through the shell. Each string is quoted so that the shell will pass it along as a single argument and without further interpretation.

Reading https://www.in-ulm.de/~mascheck/bourne/ shows another problem when trying to quote for bourne shells in a way that data is passed unmodified:

The 7th edition Unix shell (the one that does not know #) is not 8-bit clean, it uses the 8th bit internally for quoting, and sometimes forgets to clean that bit.

Bash before 1.13 also used the 8th bit internally for quoting.

Alexander

--
Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so". ;-)

Replies are listed 'Best First'.
Re^2: Problems with String::ShellQuote
by hippo (Archbishop) on Aug 18, 2022 at 22:08 UTC
    Bash before 1.13 also used the 8th bit internally for quoting.

    I couldn't find a release date for Bash 1.13 but 1.14 was released on the 2nd of June 1994, according to this release notice - so that's a few months before Perl 5.000. If anyone is still running a version of Bash prior to 1.13 they'll have substantially bigger problems than this.


    🦛

Re^2: Problems with String::ShellQuote
by NERDVANA (Priest) on Aug 19, 2022 at 20:59 UTC
    In fact, wikipedia says Features introduced after 1979:
    • # as comment character – System III shell (1981)
    • 8-bit clean – SVR3 shell (1986)

    so it rather weakens your argument to lead with a complaint about this. I doubt anyone cares about shipping software compatible with anything before POSIX.

    And of course, the author of ShellQuote probably meant "bash" rather than "bourne", just guessing.

      I doubt anyone cares about shipping software compatible with anything before POSIX.

      As I wrote:

      Oops #1: Assumes every bourne shell accepts # for comments. Most of them do, but the ancient V7 bourne shell does not. Oh well. Document it as limitation and ship it.

      Same for non-8-bit-clean shells.

      Of course, Oops #1 and Oops #2 were the low-hanging fruits, and the 8-bit problem of old shells isin the same category.

      And of course, the author of ShellQuote probably meant "bash" rather than "bourne", just guessing.

      Even if he meant bash instead of bourne, String::ShellQuote still damages data (Oops #2) and still does not quote correctly (Oops #3 and #4).

      And if your guess is correct, it is at least a documentation error. Every homo sapiens is a mammal, but not every mammal is a homo sapiens. Every bash is a bourne shell, but not every bourne shell is a bash.

      Alexander

      --
      Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so". ;-)
        Grandpa Simpson:
        I know he's the one that stole the zirconia!

        One, I noticed Malloy wore sneakers! Sneakers are for sneaking!

        Two, I saw him snooping around the back of the building the night it was stolen.

        Three, in his livingroom is the world's largest cubit zirconia!