[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: printf %q represents null argument as empty string.
From: |
Dan Douglas |
Subject: |
Re: printf %q represents null argument as empty string. |
Date: |
Fri, 11 Jan 2013 15:05:53 -0600 |
User-agent: |
KMail/4.8.3 (Linux/3.4.6-pf+; KDE/4.8.3; x86_64; ; ) |
On Friday, January 11, 2013 09:39:00 PM John Kearney wrote:
> Am 11.01.2013 19:38, schrieb Dan Douglas:
> > $ set --; printf %q\\n "$@"
> > ''
> >
> > printf should perhaps only output '' when there is actually a
corresponding
> > empty argument, else eval "$(printf %q ...)" and similar may give
different
> > results than expected. Other shells don't output '', even mksh's ${var@Q}
> > expansion. Zsh's ${(q)var} does.
>
> that is not a bug in printf %q
>
> it what you expect to happen with "${@}"
> should that be 0 arguments if $# is 0.
>
> I however find the behavior irritating, but correct from the description.
>
> to do what you are suggesting you would need a special case handler for this
> "${@}" as oposed to "jjjj${@}jjjjj" or any other variation.
>
>
> what I tend to do as a workaround is
>
> printf() {
> if [ $# -eq 2 -a -z "${2}" ];then
> builtin printf "${1}"
> else
> builtin printf "${@}"
> fi
> }
>
>
> or not as good but ok in most cases something like
>
> printf "%q" ${1:+"${@}"}
>
>
I don't understand what you mean. The issue I'm speaking of is that printf %q
produces a quoted empty string both when given no args and when given one
empty arg. A quoted "$@" with no positional parameters present expands to zero
words (and correspondingly for "${arr[@]}"). Why do you think "x${@}x" is
special? (Note that expansion didn't even work correctly a few patchsets ago.)
Also as pointed out, every other shell with a printf %q feature disagrees with
Bash. Are you saying that something in the manual says that it should do
otherwise? I'm aware you could write a wrapper, I just don't see any utility
in the default behavior.
--
Dan Douglas
- printf %q represents null argument as empty string., Dan Douglas, 2013/01/11
- Re: printf %q represents null argument as empty string., John Kearney, 2013/01/11
- Re: printf %q represents null argument as empty string.,
Dan Douglas <=
- Re: printf %q represents null argument as empty string., John Kearney, 2013/01/11
- Re: printf %q represents null argument as empty string., Dan Douglas, 2013/01/11
- Re: printf %q represents null argument as empty string., Dan Douglas, 2013/01/12
- Re: printf %q represents null argument as empty string., John Kearney, 2013/01/12
- Re: printf %q represents null argument as empty string., Chet Ramey, 2013/01/12
- Re: printf %q represents null argument as empty string., John Kearney, 2013/01/12