Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Bash operators: "!" vs "-z"

Tags:

operators

bash

What is the difference between the operator "!" and "-z" applied to a string?

#Example 1
if [ ! STRING ]; then ...

#Example 2
if [ -z STRING ]; then ...

Thanks

like image 757
Zosma Avatar asked Jul 20 '18 10:07

Zosma


1 Answers

First of all you make use of single brackets. This implies that you are using the test command and not the Bash-builtin function. From the manual :

test EXPRESSION or [ EXPRESSION ]: this exits with the status returned by EXPRESSION

! EXPRESSION: test returns true of EXPRESSION is false

-z STRING: test returns true if the length of STRING is zero.

Examples:

$ [ -z "foo" ] && echo "zero length" || echo "non-zero length"
non-zero length
$ [ ! -z "foo" ] && echo "non-zero length" || echo "zero length"
non-zero length
$ [ -z "" ] && echo "zero length" || echo "non-zero length"
zero length
$ [ ! -z "" ] && echo "non-zero length" || echo "zero length"
zero length

But now you were wondering about [ ! STRING ]:

The manual states that [ STRING ] is equivalent to [ -n STRING ], which tests if STRING has a non-zero length. Thus [ ! STRING ] is equivalent to [ -z STRING ].

-n STRING: the length of STRING is nonzero.

STRING: equivalent to -n STRING

source: man test


answer:[ ! STRING ] is equivalent to [ -z STRING ]

like image 62
kvantour Avatar answered Nov 15 '22 08:11

kvantour