Exploring the latest version of the great Bourne-again shell
A Good Bash
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.
Despite recent competition from powerful alternatives such as Zsh [1], the Bourne-again shell (Bash) [2] is still the king of the hill on the Linux console. Users can use Bash interactively, and it also serves as a simple yet practical scripting language. Bash is part of the backbone of any working Linux system – all the more reason to investigate the benefits of upgrading to the new Bash 4 release, which appeared February 2009.
Why or Why Not?
On production systems, you might want to consider whether it is really necessary to upgrade to Bash 4. The major distributions will eventually spread the new version through their own updates, so the new Bash will reach you someday whether you download and install it or not. Programmers and many power users, on the other hand, like to embrace the goodies a new version offers as quickly as possible.
If you want to get a head start on new Bash features that are making their way to the next generation of Linux systems, you'll enjoy spending some quality time with Bash 4.
Table 1 provides a summary of some important new features; for a complete list, check out the NEWS file in the Bash documentation. Here, we highlight some of the most important changes.
At the Command Line
Command-line users will appreciate a few inconspicuous, but very useful, extensions debuting with the latest Bash. For example, the string expands to a list of files and paths below the current working directory in a fashion similar to the external find command. However, users need to enable the feature by issuing the command shopt -s globstar.
The developers have now adopted a more user friendly approach to what used to be one of the greatest mysteries of the Bourne shell: the way standard error message output is redirected. Instead of the 2>&1 1>file mantra, users can now use &>> file to redirect both error and standard output into a file. The |& shortcut, which redirects the standard error for a command to a pipe, is another useful addition.
Associative Arrays
One popular myth is that Bash scripts create too many processes, which ultimately affects performance. But many of the more simple applications once used with Bash, including sed, grep, basename, or dirname are no longer necessary; Bash handles these tasks just as quickly as any other scripting language with on-board tools. Despite these improvements, Bash programmers cast many an envious glance at Perl and Python, both of which have more versatile data structures.
In Version 4, Bash finally adds associative arrays to its existing single-dimensional arrays. For many coders, this change in itself is reason enough to move to the new version because it provides a more elegant approach to many problems. For example, developers can use arbitrary strings as indices in associative arrays, rather than just as integers. Listing 1 gives an example.
Listing 1
Programming with Associative Arrays
Listing 2 is a script that sorts files in directories according to their properties – for example, the creation date. The script has two fundamental problems: First, it does not work with directories that contain blanks, and second, it might process individual directories multiple times.
Listing 2
Erroneous Strings in Lists
Previous Bash versions have taken different approaches to solving this issue. In Bash 3.2, programmers can store quoted directory names in strings or an array. A script could prevent double processing by searching in the string – or by a slow linear search in the array. Neither of these approaches is particularly elegant.
Bash 4 handles this task far more simply (see Listing 3). The directory name serves as a key; the value itself is of no interest. As of line 12, the loop iterates over all the keys. The special construction with ampersands in double quotes does what it does anywhere in Bash: It tells the shell to process the values as individual tokens. The solution thus works with blanks in the target directories.
Listing 3
Associative Arrays
Buy Linux Magazine
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.
News
-
Juno Computers Launches Another Linux Laptop
If you're looking for a powerhouse laptop that runs Ubuntu, the Juno Computers Neptune 17 v6 should be on your radar.
-
ZorinOS 17.1 Released, Includes Improved Windows App Support
If you need or desire to run Windows applications on Linux, there's one distribution intent on making that easier for you and its new release further improves that feature.
-
Linux Market Share Surpasses 4% for the First Time
Look out Windows and macOS, Linux is on the rise and has even topped ChromeOS to become the fourth most widely used OS around the globe.
-
KDE’s Plasma 6 Officially Available
KDE’s Plasma 6.0 "Megarelease" has happened, and it's brimming with new features, polish, and performance.
-
Latest Version of Tails Unleashed
Tails 6.0 is based on Debian 12 and includes GNOME 43.
-
KDE Announces New Slimbook V with Plenty of Power and KDE’s Plasma 6
If you're a fan of KDE Plasma, you'll be thrilled to hear they've announced a new Slimbook with an AMD CPU and the latest version of KDE Plasma desktop.
-
Monthly Sponsorship Includes Early Access to elementary OS 8
If you want to get a glimpse of what's in the pipeline for elementary OS 8, just set up a monthly sponsorship to help fund its continued existence.
-
DebConf24 to be Held in South Korea
Busan will be the location of the latest DebConf running July 28 through August 4
-
Fedora Unleashes Atomic Desktops
Fedora has combined its solid distribution with rpm-ostree system to make it possible to deliver a new family of Fedora spins, called Fedora Atomic Desktops.
-
Bootloader Vulnerability Affects Nearly All Linux Distributions
The developers of shim have released a version to fix numerous security flaws, including one that could enable remote control execution of malicious code under certain circumstances.