Skip to content

The Bash Hackers Wiki

Under construction

This is an archive of the old wiki.bash-hackers.org with the goal of preserving and improving the content by the community in a modern way and format.

The most recent version of each page that had content was automatically converted to Markdown and can be found here. Pandoc did its best, but there is still some work to do as not all pages are formatted correctly. So for everyone who is interested in helping out, feel free to open PRs. Any help is welcome.

This wiki is intended to hold documentation of any kind about GNU Bash. The main motivation was to provide human-readable documentation and information so users aren't forced to read every bit of the Bash manpage - which can be difficult to understand. However, the docs here are not meant as a newbie tutorial.

This wiki and any programs found in this wiki are free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

This wiki and its programs are distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/.

Stranger! Feel free to comment or edit the contents on GitHub. Use GitHub Issues to submit bugs and GitHub Discussions for enhancements, requests and general feedback/discussion.

Scripting and general information

Code snippets

There is a section that holds small code snippets.

See also some Bash source code excerpts.

How to

Doing specific tasks: concepts, methods, ideas:

Bash syntax and operations

Compound commands

Compound commands overview
Grouping
{ ...; } command grouping
( ... ) command grouping in a subshell
Conditionals
[[ ... ]] conditional expression
if ...; then ...; fi conditional branching
case ... esac pattern-based branching
Loops
for word in ...; do ...; done classic for-loop
for ((x=1; x<=10; x++)); do ...; done C-style for-loop
while ...; do ...; done while loop
until ...; do ...; done until loop
Misc
(( ... )) arithmetic evaluation
select word in ...; do ...; done user selections

Expansions and substitutions

Introduction to expansions and substitutions
{A,B,C} {A..C} Brace expansion
~/ ~root/ Tilde expansion
$FOO ${BAR%.mp3} Parameter expansion
`command` $(command) Command substitution
<(command.md) >(command) Process substitution
$((1 + 2 + 3)) $[4 + 5 + 6] Arithmetic expansion
Hello <---> Word! Word splitting
/data/*-av/*.mp? Pathname expansion

Builtin Commands

This is a selection of builtin commands and command-like keywords, loosely arranged by their common uses. These are provided directly by the shell, rather than invoked as standalone external commands.

Declaration commands

Note

Commands that set and query attributes/types, and manipulate simple datastructures.

Command Description Alt Type
declare Display or set shell variables or functions along with attributes. typeset builtin
export Display or set shell variables, also giving them the export attribute. typeset -x special builtin
eval Evaluate arguments as shell code. special builtin
local Declare variables as having function local scope. builtin
readonly Mark variables or functions as read-only. typeset -r special builtin
unset Unset variables and functions. special builtin
shift Shift positional parameters special builtin

IO

Note

Commands for reading/parsing input, or producing/formatting output of standard streams.

Command Description Alt Type
coproc Co-processes: Run a command in the background with pipes for reading / writing its standard streams. keyword
echo Create output from arguments. builtin
mapfile Read lines of input into an array. readarray builtin
printf "advanced echo" builtin
read Read input into variables or arrays, or split strings into fields using delimiters. builtin

Configuration and Debugging

Note

Commands that modify shell behavior, change special options, assist in debugging.

Command Description Alt Type
caller Identify/print execution frames. builtin
set Set the positional parameters and/or set options that affect shell behaviour. special builtin
shopt set/get some bash-specific shell options. builtin

Control flow and data processing

Note

Commands that operate on data and/or affect control flow.

Command Description Alt Type
colon "true" null command. true special builtin
. (dot) Source external files. source special builtin
false Fail at doing nothing. builtin
continue / break continue with or break out of loops. special builtin
let Arithmetic evaluation simple command. builtin
return Return from a function with a specified exit status. special builtin
[] The classic test simple command. test builtin

Process and Job control

Note

Commands related to jobs, signals, process groups, subshells.

Command Description Alt Type
exec Replace the current shell process or set redirections. special builtin
exit Exit the shell. special builtin
trap Set signal handlers or output the current handlers. special builtin
kill Send a signal to specified process(es.md) builtin
times Display process times. special builtin
wait Wait for background jobs and asynchronous lists. builtin

Dictionary

A list of expressions, words, and their meanings can be found under the Dict tab.

Documentation / Reference

Bash Libraries (needs review)

Contact

Visit us in ircs://irc.libera.chat:6697, channel #bash ;-)

If you have critiques or suggestions, please feel free to send a mail using the contact form on the right. Note that there is a simple discussion option below every article.

Please also see the imprint if you have problems with the site and its contents (legality, ...)!

It also would be nice to drop a line when

  • it helped you
  • it didn't help you (something missing / unclear)
  • you like it
  • you don't like it
  • you found mistakes / bugs

Simply: Reader's feedback.

Comments