| # 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" |
| # |
| # ${#:+} is a :+ op on $#, but ${#+} (and any other ${#c}) is "length of $c", |
| # not + op on $#. |
| # bash and dash do not accept ${#+}. it's possible for some shell to skip |
| # the check that c is valid and interpret ${#+} as "len of $+". Not testing it. |
| # echo _${#+}_ |
| 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} |