What command means "do nothing" in a conditional in Bash? What command means "do nothing" in a conditional in Bash? bash bash

What command means "do nothing" in a conditional in Bash?


The no-op command in shell is : (colon).

if [ "$a" -ge 10 ]then    :elif [ "$a" -le 5 ]then    echo "1"else    echo "2"fi

From the bash manual:

: (a colon)
Do nothing beyond expanding arguments and performing redirections. The return status is zero.


You can probably just use the true command:

if [ "$a" -ge 10 ]; then    trueelif [ "$a" -le 5 ]; then    echo "1"else    echo "2"fi

An alternative, in your example case (but not necessarily everywhere) is to re-order your if/else:

if [ "$a" -le 5 ]; then    echo "1"elif [ "$a" -lt 10 ]; then    echo "2"fi


Although I'm not answering the original question concering the no-op command, many (if not most) problems when one may think "in this branch I have to do nothing" can be bypassed by simply restructuring the logic so that this branch won't occur.

I try to give a general rule by using the OPs example

do nothing when $a is greater than "10", print "1" if $a is less than "5", otherwise, print "2"

we have to avoid a branch where $a gets more than 10, so $a < 10 as a general condition can be applied to every other, following condition.

In general terms, when you say do nothing when X, then rephrase it as avoid a branch where X. Usually you can make the avoidance happen by simply negating X and applying it to all other conditions.

So the OPs example with the rule applied may be restructured as:

if [ "$a" -lt 10 ] && [ "$a" -le 5 ]then    echo "1"elif [ "$a" -lt 10 ]then    echo "2"fi

Just a variation of the above, enclosing everything in the $a < 10 condition:

if [ "$a" -lt 10 ]then    if [ "$a" -le 5 ]    then        echo "1"    else        echo "2"    fifi

(For this specific example @Flimzys restructuring is certainly better, but I wanted to give a general rule for all the people searching how to do nothing.)