trondd wrote in <49f29107642e86c17283b0582a9f09f4.squir...@mail.kagu-tsu\
chi.com>:
 |On Sun, November 3, 2019 12:02 pm, trondd wrote:
 |> On Sun, November 3, 2019 6:27 am, Florian Obser wrote:
 |>> On Sun, Nov 03, 2019 at 12:21:59PM +0100, Antoine Jacoutot wrote:
 |>>> On Sun, Nov 03, 2019 at 12:16:56PM +0100, Florian Obser wrote:
 ...
 |I've tested the diff and it works as expected in my environment.  I don't
 |need a username and password for proxy access but it populates the
 |rc.firsttime file fine.
 |
 |The quote() function is actually pretty simple.
 |
 |quote() (
 |        # Since this is a subshell we won't pollute the calling namespace.
 |        for _a; do
 |                # alias string to Q, does escaping and quoting
 |                alias Q=$_a;
 |                # set variable back to value of alias
 |                _a=$(alias Q);
 |                # print variable, chopping off alias definition
 |                #   no newline, don't substitute the escape sequences
 |                #   we made above
 |                print -rn -- " ${_a#Q=}"
 |        done | sed '1s/ //'
 |        echo
 |)

I felt a bit undecided from your first mail on, maybe also because
of your mailer, but wanted to post the all-compatible all-shell
quote of and from Robert Elz here.

  #@ Round trip quote strings in POSIX shell.  E.g.,
  #@    set -- x 'a \ b' "foo'" "\\'b\\a\\r\\" AƤ
  #@    printf "%s: <%s><%s><%s><%s><%s>\n" "$#" "${1}" "${2}" "${3}" "$4" "$5"
  #@    saved_parameters=`quote_rndtrip "$@"`
  #@    eval "set -- $saved_parameters"
  #@    printf "%s: <%s><%s><%s><%s><%s>\n" "$#" "${1}" "${2}" "${3}" "$4" "$5"
  #
  # 2017 Robert Elz (kre).

...

  # Though slower use a subshell version instead of properly restoring $IFS
  # and flags, as elder shells may not be able to properly restore flags via
  # "set +o" as later standardized in POSIX, and it seems overkill to handle
  # all possible forms of output "set +o" may or may not actually generate.
  quote__rndtrip() (
     case "$1" in
     *\'*) ;;
     *) printf "'%s'" "$1"; return 0;;
     esac
     a="$1" s= e=
     while case "$a" in
        \'*)  a=${a#?}; s="${s}\\\\'";;
        *\')  a=${a%?}; e="${e}\\\\'";;
        '')   printf "${s}${e}"; exit 0;;
        *) false;;
        esac
     do
        continue
     done
     IFS=\'
     set -f
     set -- $a
     r="${1}"
          shift
     for a
     do
        r="${r}'\\''${a}"
     done
     printf "${s}'%s'${e}" "${r}"
     exit 0
  )

  quote_rndtrip() (
     j=
     for i
     do
        [ -n "$j" ] && printf ' '
        j=' '
        quote__rndtrip "$i"
     done
  )

  quote_string() (
     j=
     for i
     do
        [ -n "$j" ] && printf '\\ '
        j=' '
        quote__rndtrip "$i"
     done
  )


 |$ export "test=fancy ' stuff #and not a comment"
 |$ ./quote.ksh
 |$ cat test.out
 |
 |export 'http_proxy=fancy '\'' stuff #and not a comment'
 |
 |$ export "test=even
 |> this works #"
 |$ ./quote.ksh
 |$ cat test.out
 |
 |export 'http_proxy=even
 |this works #'

Of course, if in install.sub there is already your quote function,
that surely is preferred.

Good night,

--steffen
|
|Der Kragenbaer,                The moon bear,
|der holt sich munter           he cheerfully and one by one
|einen nach dem anderen runter  wa.ks himself off
|(By Robert Gernhardt)

Reply via email to