> On Wed, Apr 19, 2023 at 09:16:26PM +0200, lejeczek via CentOS wrote: >>On 19/04/2023 08:46, wwp wrote: >>> Hello lejeczek, > ... >>>>> Surround ${_Val} with double quotes (as you should) and things will >>>>> be different: >>>>> >>>>> $ unset _Val; test -n "${_Val}"; echo $? >>>>> 1 >>>>> >>>>> Now you get it? :-) >>>>> >>>> I don't know, am not sure, I remembered it differently, did not think >>>> enclosing quotes were necessary(always?) for that were {} >>> {} does not prevent this (at least not in bash): >>> >>> $ FOO="a b" >>> >>> $ test -z $FOO >>> bash: test: a: binary operator expected >>> >>> $ test -z ${FOO} >>> bash: test: a: binary operator expected >>> >>> Because after $FOO or ${FOO} variable expansion, bash parsed: >>> test -z a b >>> 'b' is unexpected, from a grammar point of view. >>> >>> Quoting is expected, here: >>> $ test -z "$FOO" >>> <no error> >>> >>> When FOO is unset, apparently it's a different matter, where you end up >>> with $?=0 in all unquoted -n/-z cases, interestingly. I could not find >>> this specific case in the bash documentation. That may not be portable >>> to other shells, BTW. I only use {} when necessary (because of what >>> bash allows to do between {}, plenty!, or when inserting $FOO into a >>> literal string that may lead the parser to take the whole string for a >>> variable name: echo $FOObar != echo ${FOO}bar). >>> >>> >>> Regards, >>There is a several ways to run tests in shell, but 'test' >>which is own binary as I understand, defeats me.. > > Yes, there is a binary for test (and its alternate '['). > > But most shells, including bash have incorporated code for test > (and other commands) into the shell code itself for efficiency. > > $ type test > test is a shell builtin > >> >>I'd expect a consistency, like with what I usually do to >>test for empty var: >>-> $ export _Val=some; [[ -v _Val ]]; echo $? >>0 >>-> $ unset _Val; [[ -v _Val ]]; echo $? >>1 >> > > I do hope you don't use -v to test for empty variables as > it tests for "set" variables and valid name syntax. > > Set variables can be "empty" ( name= ). > > But in your last example _Val is "un"set, it does not > exist. Thus it can neither be empty nor occupied. And to know if a variable is declared or not, this can be used: if (( ${VAR+1} )); then echo "variable \$VAR is set" else echo "variable \$VAR is NOT set" fi Regards, Simon _______________________________________________ CentOS mailing list CentOS@xxxxxxxxxx https://lists.centos.org/mailman/listinfo/centos