<div dir="ltr">I believe it was significant when /bin/sh was really /bin/sh and not bash in sh mode<div><br></div><div>For example:</div><div><br></div><div>root@hyclak:~ # ls -l /bin/sh<br><br>lrwxrwxrwx. 1 root root 4 Sep 25 17:01 /bin/sh -&gt; bash<br><br>root@hyclak:~ # cat /etc/redhat-release<br><br>CentOS release 6.7 (Final)</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Oct 6, 2015 at 5:21 PM,  <span dir="ltr">&lt;<a href="mailto:jep200404@columbus.rr.com" target="_blank">jep200404@columbus.rr.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Which shell test would you choose? Why?<br>
Would you choose a test not shown below? Why?<br>
<br>
I saw a shell test like [ &quot;z${1}&quot; = &quot;z&quot; ],<br>
which got me wondering, why bother with the &#39;z&#39;?<br>
Is there some subtle behavior, perhaps when there<br>
is no &quot;${1}&quot; argument? So I experimented.<br>
<br>
These tests worked the same:<br>
<br>
    [ &quot;${1:+is_set}&quot; != &quot;is_set&quot; ]<br>
    [ &quot;z${1}&quot; = &quot;z&quot; ]<br>
    [ &quot;${1}&quot; = &quot;&quot; ]<br>
<br>
The last of those above is curious.<br>
Since it works the same as with &#39;z&#39;, why bother with the &#39;z&#39;?<br>
<br>
Only [ &quot;${#}&quot; -lt 1 ] was different,<br>
and seems more strictly correct<br>
unless an empty first argument is to be treated the<br>
same as no first argument.<br>
<br>
    [user@colug ~]$ cat boo.sh<br>
    #!/bin/sh<br>
<br>
    a=&quot;${1:+is_set}&quot;<br>
    echo &quot;a is &gt;$a&lt;&quot;<br>
<br>
    if [ &quot;${1:+is_set}&quot; != &quot;is_set&quot; ]; then<br>
        echo one<br>
    fi<br>
<br>
    b=&quot;z${1}&quot;<br>
    echo &quot;b is &gt;$b&lt;&quot;<br>
<br>
    if [ &quot;z${1}&quot; = &quot;z&quot; ]; then<br>
        echo two<br>
    fi<br>
<br>
    c=&quot;${1}&quot;<br>
    echo &quot;c is &gt;$c&lt;&quot;<br>
<br>
    if [ &quot;${1}&quot; = &quot;&quot; ]; then<br>
        echo tree<br>
    fi<br>
<br>
    d=&quot;${#}&quot;<br>
    echo &quot;d is &gt;$d&lt;&quot;<br>
<br>
    if [ &quot;${#}&quot; -lt 1 ]; then<br>
        echo for<br>
    fi<br>
    [user@colug ~]$ ./boo.sh<br>
    a is &gt;&lt;<br>
    one<br>
    b is &gt;z&lt;<br>
    two<br>
    c is &gt;&lt;<br>
    tree<br>
    d is &gt;0&lt;<br>
    for<br>
    [user@colug ~]$ ./boo.sh &#39;&#39;<br>
    a is &gt;&lt;<br>
    one<br>
    b is &gt;z&lt;<br>
    two<br>
    c is &gt;&lt;<br>
    tree<br>
    d is &gt;1&lt;<br>
    [user@colug ~]$ ./boo.sh &#39; &#39;<br>
    a is &gt;is_set&lt;<br>
    b is &gt;z &lt;<br>
    c is &gt; &lt;<br>
    d is &gt;1&lt;<br>
    [user@colug ~]$ ./boo.sh &#39;&#39; world<br>
    a is &gt;&lt;<br>
    one<br>
    b is &gt;z&lt;<br>
    two<br>
    c is &gt;&lt;<br>
    tree<br>
    d is &gt;2&lt;<br>
    [user@colug ~]$ ./boo.sh &#39; &#39; world<br>
    a is &gt;is_set&lt;<br>
    b is &gt;z &lt;<br>
    c is &gt; &lt;<br>
    d is &gt;2&lt;<br>
    [user@colug ~]$ ./boo.sh hello world<br>
    a is &gt;is_set&lt;<br>
    b is &gt;zhello&lt;<br>
    c is &gt;hello&lt;<br>
    d is &gt;2&lt;<br>
    [user@colug ~]$<br>
_______________________________________________<br>
colug-432 mailing list<br>
<a href="mailto:colug-432@colug.net">colug-432@colug.net</a><br>
<a href="http://lists.colug.net/mailman/listinfo/colug-432" rel="noreferrer" target="_blank">http://lists.colug.net/mailman/listinfo/colug-432</a><br>
</blockquote></div><br></div>