bash¶
GNU Bourne-Again SHell (https://www.gnu.org/software/bash/)
For example
To implement a case statement
Retrieve N-th piped command exit status
Fork bomb. Do not run this! Has the potential to wreak havoc. It repeatedly
and quickly spawns a lot of processes until the system eventually locks up.
Unix Roulette, courtesy of Bigown's answer in the joke thread
DANGER! Don't execute!
Luckily, most modern setups have --preserve-root on by default, so this
will be null and void, but even so, not even remotely worth the risk!
Test for a variable being equal to (-eq) an integer (0)
Test for a PATH executable existing as a file, but note that aliases and
functions will also output and result in a 0 exit status.
However, that is a solution commonly found in a script using the Bourne
shell, so in this case, an alternative, Bash-like, and more accurate version could be:
Verbosely convert whitespaces () to underscores (_) in file names
Some people like to cuddle the variable name with braces ('{' and '}') but
this is usually superfluous and wasted keystrokes, unless you need to protect the variable name from having other characters included, as in the below example, or you're using one of the many features of parameter expansion.
Access a given index in an array. In this example, you don't technically
need to specify the element, because by default the first element is used. As with many other languages, note that indices are 0-first, so 1 is the 2nd.
Expand array variable to the number of elements/indices. You may find that
[*] works as well as [@], in this case.
Expand variable to a substring. In this case, imagine Var is equal to the
string 'thing', but the offset is 2 and the length is 1, giving us an 'i'.
Expand variable to a substring by removing the matched glob pattern from left
to right. To make this global (IE: greedy) use two '#' characters. So, in this example, everything, from left to right, up to and including a 'T' or 't', will be removed, but it would only happen once.
Change how the variable expands by using pattern substitution. This uses glob
pattern matching, not REGEX. If the first '/' is instead '//', a greedy match is performed.
A good example of the above, which will list directories in PATH which exist
and are directories. It works because all instances of ':' are replaced with a whitespace, causing find(1) to see multiple directories (fields) in which to search.
Expand the variable to the string between :- and the closing }, if that
variable doesn't already have a value. This can be useful to set a default.
This is a way of displaying an error message if the contents of the variable
is empty. It will also immediately exit with an exit status of 1.
Indirect expansion exists in a couple of ways in BASH. If Var is equal to
OtherVar, and that OtherVar is equal to true, the below example would
expand to true.
Expand variable so that the first letter is uppercase. Use two '^' (carets)
if you want the entire contents of the variable to change to uppercase.
As above, but convert to lowercase. Use two ',' characters to transform the
entire string to which Var expands.
To implement a case command
Retrieve N-th piped command exit status
tldr:bash
bash
Bourne-Again SHell, an sh-compatible command-line interpreter.
See also: zsh, histexpand (history expansion).
More information: https://www.gnu.org/software/bash/.
Start an interactive shell session: