hush parameter expansion ${parameter:+word} is backwards compared to bash

Bob bob at lutz.net
Tue Dec 13 20:50:03 CET 2022



I notice that the hush parameter expansion ${parameter:+word} is 
backwards compared to bash.

Here is a test case comparing 'u-boot hush' against 'debian bash'.
It shows that at lines 4 and 8, the results are backwards:

    shell command                                result u-boot hush       
  result debian-bash
    -------------------------------------       ---------------------    
---------------------
1. var=''
2. echo "\${var}       = (${var})"             ${var}       = ()        
${var}       = ()
3. echo "\${var:-bbbb} = (${var:-bbbb})"       ${var:-bbbb} = (bbbb)    
${var:-bbbb} = (bbbb)
4. echo "\${var:+cccc} = (${var:+cccc})"       ${var:+cccc} = (cccc)    
${var:+cccc} = ()

5. var='aaaa'
6. echo "\${var}       = (${var})"             ${var}       = (aaaa)    
${var}       = (aaaa)
7. echo "\${var:-bbbb} = (${var:-bbbb})"       ${var:-bbbb} = (aaaa)    
${var:-bbbb} = (aaaa)
8. echo "\${var:+cccc} = (${var:+cccc})"       ${var:+cccc} = ()        
${var:+cccc} = (cccc)

The bash manual says at: 
https://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html

${parameter:+word}
------------------
   If parameter is null or unset, nothing is substituted, otherwise the 
expansion of word is substituted.

   Example:
   --------
   $ var=123
   $ echo ${var:+var is set and not null}
   var is set and not null


More information about the U-Boot mailing list