bug-bash
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

More fun with IFS


From: Dan Douglas
Subject: More fun with IFS
Date: Wed, 30 Jan 2013 00:03:58 -0600
User-agent: KMail/4.8.3 (Linux/3.4.6-pf+; KDE/4.8.3; x86_64; ; )

Hi everyone, and welcome to another edition of IBOTD (IFS-bug-of-the-day), 
featuring everyone's favorite Bourne shell kludge: word-splitting!

On today's episode - inconsistencies within assignments that depend upon 
quoting. Though I can't take credit for discovering this -- it was pointed out 
to me by some guys on IRC after demonstrating some other stuff.

And a quick test:

function expassign {
        typeset -a a
        a=("$@")
        typeset var asn

        while IFS= read -r asn; do
                IFS=: command eval "$asn"
                printf '%-14s... %s\n' "$asn" "$var"
        done <<\EOF
var=${a[*]}
var="${a[*]}"
var=$*
var="$*"
var=${a[@]}
var="${a[@]}"
var=$@
var="$@"
EOF
}

${ZSH_VERSION+:} false && emulate ksh
expassign one:::two three:::four

Bash output:                              # I think...
var=${a[*]}   ... one   two three   four  # bad
var="${a[*]}" ... one:::two:three:::four  # good
var=$*        ... one:::two:three:::four  # good
var="$*"      ... one:::two:three:::four  # good
var=${a[@]}   ... one   two three   four  # bad
var="${a[@]}" ... one:::two three:::four  # good
var=$@        ... one   two three   four  # bad
var="$@"      ... one:::two three:::four  # good

Zsh and pdkshes produce:

one:::two:three:::four

For all of the above, which I think is wrong for the last 4. ksh93 produces:

one:::two three:::four

for the last 4, which I think is correct.

-- 
Dan Douglas



reply via email to

[Prev in Thread] Current Thread [Next in Thread]