Bash 4.0 Introduces Associative Arrays

Feb 24, 2009

The GNU Project's Bourne Again Shell (bash) is now in its fourth major version, which provides numerous enhancements.

For one thing, bash now recognizes associative arrays. The newly introduced "**" wildcard recursively matches all libraries and files, although it requires activation of the "globstar" shell option. The new "&>>" redirection operator appends the standard output and standard error to a file.

Programmable completion code also includes some feature enhancements. The developers fixed a few related bugs on the bash 3 branch and improved other POSIX compatibility issues. The full list of new features and enhancements are here, with more details on the bash manpage.

Version compatibility details are here, especially related to the older versions 1.14 and 2.0, especially as to the use of shell options.

Bash 4.0 is under GLPv3 licensing and is available at GNU mirrors as source tarballs for download. Along with bash, a new version 6.0 of the GNU Readline library is also available.

Related content

  • Scripting Tutorial for Bash 4.0

    The "Advanced Bash Scripting Guide" version 6 has been reworked to incorporate the new features of Bash 4.0.

  • Log4bash: Logging for Linux Shell

    With version 1.0, log4bash makes its first appearance in providing logging functions for shell scripts.

  • Bash Completion 1.1 Adds Shell Functionality

    The Bash shell has long supported extending command completion through scripts. The Bash-Completion package delivers full scripts for Linux commands and is currently available in version 1.1.

  • Bash 4

    Despite the Bourne-again shell's biblical age and high level of maturity, developers continue to work on it. We take a look at the latest Bash release.

  • Bash Builtins

    Even beginners can benefit from a greater understanding of the Bash shell’s many builtin commands.


  • bash associative array... solution!

    this is my solution:

    function idx { eval 'case $1 in '${cases[*]}' *) [ "$1" ] && { cases=( ${cases[*]} '\''"'\''$1'\''"blunk echo '${#cases[*]}';;'\'' ); echo '${#cases[*]}';}; esac'; }

    idx all
    idx all
    idx jhon
    idx all

    as you can see the function return different values for different strings
    so associative array becomes quite simple like a simple array

    array[`idx name`]=value
    echo ${array[`idx name`]}

    what do you think?
comments powered by Disqus
Subscribe to our Linux Newsletters
Find Linux and Open Source Jobs
Subscribe to our ADMIN Newsletters

Support Our Work

Linux Magazine content is made possible with support from readers like you. Please consider contributing when you’ve found an article to be beneficial.

Learn More