# First try some invalid patterns. Do in subshell due to parsing error. # (set argv0 to "SHELL" to avoid "/path/to/shell: blah" in error messages) "$THIS_SH" -c 'echo ${+} ; echo moo' SHELL "$THIS_SH" -c 'echo ${:+} ; echo moo' SHELL # now some funky ones. # ${V+word} "if V unset, then substitute nothing, else substitute word" # ${V:+word} "if V unset or '', then substitute nothing, else substitute word" # bash doesn't accept ${#+}. ash prints 0 (not $#). echo _${#+}_ _${#:+}_ # Forms with non-empty word work as expected in both ash and bash. echo _${#+z}_ _${#:+z}_ # now some valid ones set -- echo _$1 _${1+} _${1:+} _${1+word} _${1:+word} set -- aaaa echo _$1 _${1+} _${1:+} _${1+word} _${1:+word} unset f echo _$f _${f+} _${f:+} _${f+word} _${f:+word} f= echo _$f _${f+} _${f:+} _${f+word} _${f:+word} f=fff echo _$f _${f+} _${f:+} _${f+word} _${f:+word}