# first try some invalid patterns (do in subshell due to parsing error) "$THIS_SH" -c 'echo ${=}' "$THIS_SH" -c 'echo ${:=}' # now some funky ones "$THIS_SH" -c 'echo ${#=}' "$THIS_SH" -c 'echo ${#:=}' # should error out "$THIS_SH" -c 'set --; echo _${1=}' "$THIS_SH" -c 'set --; echo _${1:=}' "$THIS_SH" -c 'set --; echo _${1=word}' "$THIS_SH" -c 'set --; echo _${1:=word}' # should not error "$THIS_SH" -c 'set aa; echo _${1=}' "$THIS_SH" -c 'set aa; echo _${1:=}' "$THIS_SH" -c 'set aa; echo _${1=word}' "$THIS_SH" -c 'set aa; echo _${1:=word}' # should work fine unset f; echo _$f unset f; echo _${f=} unset f; echo _${f:=} unset f; echo _${f=word} unset f; echo _${f:=word} f=; echo _$f f=; echo _${f=} f=; echo _${f:=} f=; echo _${f=word} f=; echo _${f:=word} f=fff; echo _$f f=fff; echo _${f=} f=fff; echo _${f:=} f=fff; echo _${f=word} f=fff; echo _${f:=word}