A null string in Bash can be declared by equalizing a variable to “”. Then we have an “if” statement followed by the “-n” flag, which returns true if a string is not null. We have used this flag to test our string “name,” which is null.
$? expands to the exit status of the most recently executed foreground pipeline. See the Special Parameters section of the Bash manual. In simpler terms, it's the exit status of the last command.
The manual page for Bash (e.g. man bash ) says that the -c option executes the commands from a string; i.e. everything inside the quotes.
When the shell sees a semicolon (;) on a command line, it's treated as a command separator -- basically like pressing the ENTER key to execute a command.
It's there more for historical reasons. The colon builtin :
is exactly equivalent to true
. It's traditional to use true
when the return value is important, for example in an infinite loop:
while true; do
echo 'Going on forever'
done
It's traditional to use :
when the shell syntax requires a command but you have nothing to do.
while keep_waiting; do
: # busy-wait
done
The :
builtin dates all the way back to the Thompson shell, it was present in Unix v6. :
was a label indicator for the Thompson shell's goto
statement. The label could be any text, so :
doubled up as a comment indicator (if there is no goto comment
, then : comment
is effectively a comment). The Bourne shell didn't have goto
but kept :
.
A common idiom that uses :
is : ${var=VALUE}
, which sets var
to VALUE
if it was unset and does nothing if var
was already set. This construct only exists in the form of a variable substitution, and this variable substitution needs to be part of a command somehow: a no-op command serves nicely.
See also What purpose does the colon builtin serve?.
I use it for if statements when I comment out all the code. For example you have a test:
if [ "$foo" != "1" ]
then
echo Success
fi
but you want to temporarily comment out everything contained within:
if [ "$foo" != "1" ]
then
#echo Success
fi
Which causes bash to give a syntax error:
line 4: syntax error near unexpected token `fi' line 4: `fi'
Bash can't have empty blocks (WTF). So you add a no-op:
if [ "$foo" != "1" ]
then
#echo Success
:
fi
or you can use the no-op to comment out the lines:
if [ "$foo" != "1" ]
then
: echo Success
fi
If you use set- e
then || :
is a great way to not exit the script if a failure happens (it explicitly makes it pass).
You would use :
to supply a command that succeeds but doesn't do anything. In this example the "verbosity" command is turned off by default, by setting it to :
. The 'v' option turns it on.
#!/bin/sh
# example
verbosity=:
while getopts v OPT ; do
case $OPT in
v)
verbosity=/bin/realpath
;;
*)
exit "Cancelled"
;;
esac
done
# `$verbosity` always succeeds by default, but does nothing.
for i in * ; do
echo $i $($verbosity $i)
done
$ example
file
$ example -v
file /home/me/file
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With