I am learning the zsh in the conditional expressions part, and I found some unreasonable output.
For example:
$ mkdir emptyspace && cd emptyspace
$ var_assigned_with_emptystring=""
$ [[ -n $var_assigned_with_emptystring ]] && echo 'var_assigned_with_emptystring is a nonzero-len string!'
$ [[ -n "" ]] && echo '"" is a nonzero-len string!'
$ test -n $var_assigned_with_emptystring && echo 'var_assigned_with_emptystring is a nonzero-len string by test!'
var_assigned_with_emptystring is a nonzero-len string by test!
$ test -n "" && echo '"" is a nonzero-len string by test!'
----------
$ [[ -z $var_assigned_with_emptystring ]] && echo 'var_assigned_with_emptystring is a zero-len string!'
var_assigned_with_emptystring is not an empty string!
$ [[ -z "" ]] && echo '"" is a zero-len string!'
"" is a zero-len string!
$ test -z $var_assigned_with_emptystring && echo 'var_assigned_with_emptystring is a zero-len string by test!'
var_assigned_with_emptystring is a zero-len string by test!
$ test -z "" && echo '"" is a zero-len string by test!'
"" is a zero-len string by test!
Why does the
testwith avar_assigned_with_emptystringalways gives a true result no matter it is with-nor-zoption? What's the difference betweentestcommand and individual conditional expression surrounded by[[]]?What is the difference between
""andvar_assigned_with_emptystring? I think the parameter should have be expended(or evaluated) to a same value as""when it comes to process in the internal part of test function. Buttest -n $var_assigned_with_emptystringgives a different return status withtest -n ""