Bug 845925 - test -n always returns 0 if evaluating variable
test -n always returns 0 if evaluating variable
Product: Fedora
Classification: Fedora
Component: coreutils (Show other bugs)
Unspecified Unspecified
unspecified Severity unspecified
: ---
: ---
Assigned To: Ondrej Vasik
Fedora Extras Quality Assurance
Depends On:
Blocks: 845927 845929
  Show dependency treegraph
Reported: 2012-08-06 03:12 EDT by Martin Kyral
Modified: 2012-08-06 03:27 EDT (History)
5 users (show)

See Also:
Fixed In Version:
Doc Type: Bug Fix
Doc Text:
Story Points: ---
Clone Of:
: 845927 845929 (view as bug list)
Last Closed: 2012-08-06 03:27:52 EDT
Type: Bug
Regression: ---
Mount Type: ---
Documentation: ---
Verified Versions:
Category: ---
oVirt Team: ---
RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: ---

Attachments (Terms of Use)

  None (edit)
Description Martin Kyral 2012-08-06 03:12:52 EDT
Description of problem:
According to the man page, "test -n STRING" returns true (0) if the STRING's length is non-zero and that it equivalent to "test STRING" (and contrary to "test -z STRING").

Version-Release number of selected component (if applicable):

How reproducible:

Steps to Reproduce:
1. VAR=''
2. test -n $VAR ; echo $?
3. test $VAR ; echo $?

Actual results:
In step 2, the output is 0 (true in shell semantics).

Expected results:
In step 2, the output is 0 (false in shell semantics).

Additional info:
"test -n $VAR" returns 0 on both empty and non-empty string $VAR value. "test $VAR" and "test -z $VAR" give the expected values, ie. 0,1 on non-empty and 1,0 on empty $VAR values. Also, "test -n" gives correct output if a direct value is given.
Comment 1 Martin Kyral 2012-08-06 03:22:11 EDT
Expected results:
In step 2, the output is 1 (false in shell semantics).

Sorry for the typo..
Comment 2 Kamil Dudka 2012-08-06 03:27:52 EDT
(In reply to comment #0)
> 2. test -n $VAR ; echo $?

You need to write:

test -n "$VAR"

... so that "test" actually gets an empty string.  Otherwise shell will throw the empty string away.

Additionally, you are probably using the shell built-in command "test", not the executable /usr/bin/test from coreutils:


Note You need to log in before you can comment on or make changes to this bug.