Bug 845925

Summary: test -n always returns 0 if evaluating variable
Product: [Fedora] Fedora Reporter: Martin Kyral <mkyral>
Component: coreutilsAssignee: Ondrej Vasik <ovasik>
Status: CLOSED NOTABUG QA Contact: Fedora Extras Quality Assurance <extras-qa>
Severity: unspecified Docs Contact:
Priority: unspecified    
Version: 17CC: kdudka, maxamillion, ovasik, p, twaugh
Target Milestone: ---   
Target Release: ---   
Hardware: Unspecified   
OS: Unspecified   
Whiteboard:
Fixed In Version: Doc Type: Bug Fix
Doc Text:
Story Points: ---
Clone Of:
: 845927 845929 (view as bug list) Environment:
Last Closed: 2012-08-06 03:27:52 EDT Type: Bug
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: ---
Bug Depends On:    
Bug Blocks: 845927, 845929    

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):
coreutils-8.15-7.fc17.x86_64

How reproducible:
Always


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:

http://www.gnu.org/software/coreutils/faq/coreutils-faq.html#I-am-having-a-problem-with-kill-nice-pwd-sleep-or-test_002e