[Bash-completion-devel] [bash-completion-Bugs][312183] printf -v not available in bash 3.0

bash-completion-bugs at alioth.debian.org bash-completion-bugs at alioth.debian.org
Sat Mar 6 12:36:21 UTC 2010


Bugs item #312183, was changed at 2009-12-24 16:59 by Ville Skyttä 
You can respond by visiting: 
https://alioth.debian.org/tracker/?func=detail&atid=413095&aid=312183&group_id=100114

Status: Closed
Priority: 3
Submitted By: Ville Skyttä  (scop-guest)
Assigned to: Freddy Vulto (fvu-guest)
Summary: printf -v not available in bash 3.0 
Distribution: None
Originally reported in: None
Milestone: 2.0
>Status: Won't Fix
Original bug number: 


Initial Comment:
The -v argument to printf was added in bash 3.1-alpha1, it is not available in bash 3.0.

Freddy, you have worked on the areas where printf -v is currently used, could you take a look?

FWIW, I'm not opposed to bumping the minimum required version to 3.1 if this is not sanely fixable otherwise.  (Or if it is fixable and you still have the testsuite running in cron, it'd be nice if it could be run with bash 3.0 as well...)

----------------------------------------------------------------------

>Comment By: Ville Skyttä  (scop-guest)
Date: 2010-03-06 14:36

Message:
Support for < 3.2 dropped in git per discussion on ML.

----------------------------------------------------------------------

Comment By: Ville Skyttä  (scop-guest)
Date: 2010-01-24 14:23

Message:
I've lowered that to 3.2.25 because that's the version in Red Hat Enterprise Linux 5 and derivatives.  I use bash-completion actively on one of those derivatives (CentOS 5), and I'm willing to do testing and fixing.

----------------------------------------------------------------------

Comment By: Freddy Vulto (fvu-guest)
Date: 2010-01-24 13:01

Message:
I've updated http://wiki.debian.org/Teams/BashCompletion/Proposals/DropBash2Support and set the minimum required version of bash to bash 3.2.39.  Bash 3.2.39 happens to be the minimal bash version on Debian-5.0.3, but is open for debate.

----------------------------------------------------------------------

Comment By: Freddy Vulto (fvu-guest)
Date: 2010-01-11 00:24

Message:
I tried emulating `printf -v':

---8<-------------------------------------------------------------------
# Emulate `printf -v' if bash version < 3.1
# @param $1 string  Variable name to printf to
# @param $@  Remaining parameters for printf
__vprintf() {
    if [[ ${BASH_VERSINFO[0]} -eq 3 && ${BASH_VERSINFO[1]} -eq 0 ]]; then
        local var=$1
        shift
        eval $var=\"\$\(printf \"\$@\"\)\"
    else
        printf -v "$@"
    fi
} # __vprintf()
---8<-------------------------------------------------------------------

and compiled bash-3.00.16 to test things, but I found that on bash-3.0,
compgen is behaving differently:

    test/fixtures/_filedir$ echo $BASH_VERSION
    3.00.16(1)-release
    test/fixtures/_filedir$ compgen -f 'a\\\ b'
    test/fixtures/_filedir$

compared to bash-3.2:

    test/fixtures/_filedir$ echo $BASH_VERSION
    3.2.39(1)-release
    test/fixtures/_filedir$ compgen -f 'a\\\ b/'
    a\ b/i
    test/fixtures/_filedir$

It seems these kind of differences are causing a lot of tests to fail:

    Running ./unit/_filedir.exp ...
    FAIL: f a\ b/ should show completions
    FAIL: f a\'b/ should show completions
    FAIL: f a\"b/ should show completions
    FAIL: f a\\b/ should show completions
    FAIL: f a\&b/ should show completions
    FAIL: f 'a b/ should show completions
    FAIL: f 'a"b/ should show completions
    FAIL: f 'a\b/ should show completions
    FAIL: f 'a&b/ should show completions
    FAIL: f "a\"b/ should show completions
    FAIL: f "a\b/ should show completions
    FAIL: f "a\\b/ should show completions
    FAIL: f2 a\ b/ should show completions
    FAIL: f2 a\'b/ should show completions
    FAIL: f2 a\"b/ should show completions
    FAIL: f2 a\\b/ should show completions
    FAIL: f2 a\&b/ should show completions
    FAIL: f2 'a b/ should show completions
    FAIL: f2 'a"b/ should show completions
    FAIL: f2 'a\b/ should show completions
    FAIL: f2 'a&b/ should show completions
    FAIL: f2 "a\"b/ should show completions
    FAIL: f2 "a\b/ should show completions
    FAIL: f2 "a\\b/ should show completions

            === unit Summary ===

    # of expected passes		21
    # of unexpected failures	24


If bash-3.0 isn't actively used, I don't feel the urge to pursue this differences and fix things for bash-3.0.

So I'd like to propose that we raise the minimum requirements for bash-completion-2 from bash-3 to bash-3.1 or even bash-3.2?


Regards,

Freddy Vulto
http://fvue.nl

----------------------------------------------------------------------

Comment By: Ville Skyttä  (scop-guest)
Date: 2009-12-26 15:04

Message:
For Red Hat and friends distros, that would mean dropping support for RHEL 4 and earlier, which I think is acceptable.  All Fedora releases with bash < 4 are EOL already.

----------------------------------------------------------------------

Comment By: Freddy Vulto (fvu-guest)
Date: 2009-12-24 19:58

Message:
Hmm, wasn't aware of this, I'm using bash-3.2.  The nice thing of printf -v is that no subshell is required.  If bash 3.0 needs to be supported maybe we can write a wrapper __vprintf, for example (non-executable code):
__vprintf() {
    if bash-version < 3.1 then
        eval $1=\$(printf \"\$2\" \"\$3\")
    else
        printf -v "$1" "$2" "$3"
    fi
}

I don't know if we can safely set the minimum requirements to bash-3.1?  Are there people on the mailing list how can say something about that?

----------------------------------------------------------------------

You can respond by visiting: 
https://alioth.debian.org/tracker/?func=detail&atid=413095&aid=312183&group_id=100114



More information about the Bash-completion-devel mailing list