From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 22817 invoked by alias); 17 Feb 2017 00:07:41 -0000 Mailing-List: contact zsh-workers-help@zsh.org; run by ezmlm Precedence: bulk X-No-Archive: yes List-Id: Zsh Workers List List-Post: List-Help: X-Seq: 40565 Received: (qmail 13521 invoked from network); 17 Feb 2017 00:07:41 -0000 X-Qmail-Scanner-Diagnostics: from kahlil.inlv.org by f.primenet.com.au (envelope-from , uid 7791) with qmail-scanner-2.11 (clamdscan: 0.99.2/21882. spamassassin: 3.4.1. Clear:RC:0(37.59.109.123):SA:0(-0.0/5.0):. Processed in 0.665819 secs); 17 Feb 2017 00:07:41 -0000 X-Spam-Checker-Version: SpamAssassin 3.4.1 (2015-04-28) on f.primenet.com.au X-Spam-Level: X-Spam-Status: No, score=-0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=unavailable autolearn_force=no version=3.4.1 X-Envelope-From: martijn@inlv.org X-Qmail-Scanner-Mime-Attachments: | X-Qmail-Scanner-Zip-Files: | Received-SPF: none (ns1.primenet.com.au: domain at inlv.org does not designate permitted sender hosts) Subject: Re: [BUG] var=$* and var=$@ create array with SHWORDSPLIT and null or unset IFS To: Zsh hackers list References: <62e5833f-14b1-b42b-31af-2f1532b565ed@inlv.org> From: Martijn Dekker Message-ID: <444bad7d-dd25-6226-f9e2-e68f46d07707@inlv.org> Date: Fri, 17 Feb 2017 01:07:59 +0100 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:45.0) Gecko/20100101 Thunderbird/45.7.0 MIME-Version: 1.0 In-Reply-To: <62e5833f-14b1-b42b-31af-2f1532b565ed@inlv.org> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit Op 17-02-17 om 00:05 schreef Martijn Dekker: > Here's a little test script. Figured I might as well save you some work and turn it into a proper zsh test case instead. diff --git a/Test/D04parameter.ztst b/Test/D04parameter.ztst index 9128c3c..ca1dcc2 100644 --- a/Test/D04parameter.ztst +++ b/Test/D04parameter.ztst @@ -2056,3 +2056,81 @@ 0:Regression: "-" became Dash in workers/37689, breaking ~- expansion *>* F:We do not care what $OLDPWD is, as long as it doesn't cause an error + + ( + set -- one 'two three' four + for ifs in default null unset; do + for wordsplit in native sh; do + print -r -- "--- $ifs IFS, $wordsplit splitting ---" + case $ifs in + default) IFS=$' \t\n\00' ;; + null) IFS= ;; + unset) unset -v IFS ;; + esac + case $wordsplit in + native) unsetopt shwordsplit ;; + sh) setopt shwordsplit ;; + esac + for testcmd in 'var=$@' 'var=$*' 'var="$@"' 'var="$*"'; do + print -r -- "> $testcmd" + eval "$testcmd" + printf '[%s]\n' "${var[@]}" + done + done + done + ) +0:Assigning $@, $*, "$@", "$*" to var with various shwordsplit/IFS settings +>--- default IFS, native splitting --- +>> var=$@ +>[one two three four] +>> var=$* +>[one two three four] +>> var="$@" +>[one two three four] +>> var="$*" +>[one two three four] +>--- default IFS, sh splitting --- +>> var=$@ +>[one two three four] +>> var=$* +>[one two three four] +>> var="$@" +>[one two three four] +>> var="$*" +>[one two three four] +>--- null IFS, native splitting --- +>> var=$@ +>[one two three four] +>> var=$* +>[onetwo threefour] +>> var="$@" +>[one two three four] +>> var="$*" +>[onetwo threefour] +>--- null IFS, sh splitting --- +>> var=$@ +>[one two three four] +>> var=$* +>[onetwo threefour] +>> var="$@" +>[one two three four] +>> var="$*" +>[onetwo threefour] +>--- unset IFS, native splitting --- +>> var=$@ +>[one two three four] +>> var=$* +>[one two three four] +>> var="$@" +>[one two three four] +>> var="$*" +>[one two three four] +>--- unset IFS, sh splitting --- +>> var=$@ +>[one two three four] +>> var=$* +>[one two three four] +>> var="$@" +>[one two three four] +>> var="$*" +>[one two three four]