1*3e3895bfSKrzysztof Piecuch# $FreeBSD: head/bin/sh/tests/expansion/plus-minus3.0 206817 2010-04-18 22:13:45Z jilles $ 23df4d8b0SPeter Avalos 33df4d8b0SPeter Avalose= q='?' a='*' t=texttext s='ast*que?non' p='/et[c]/' w='a b c' b='{{(#)}}' 43df4d8b0SPeter Avalosh='##' 53df4d8b0SPeter Avalosfailures='' 63df4d8b0SPeter Avalosok='' 73df4d8b0SPeter Avalos 83df4d8b0SPeter Avalostestcase() { 93df4d8b0SPeter Avalos code="$1" 103df4d8b0SPeter Avalos expected="$2" 113df4d8b0SPeter Avalos oIFS="$IFS" 123df4d8b0SPeter Avalos eval "$code" 133df4d8b0SPeter Avalos IFS='|' 143df4d8b0SPeter Avalos result="$#|$*" 153df4d8b0SPeter Avalos IFS="$oIFS" 163df4d8b0SPeter Avalos if [ "x$result" = "x$expected" ]; then 173df4d8b0SPeter Avalos ok=x$ok 183df4d8b0SPeter Avalos else 193df4d8b0SPeter Avalos failures=x$failures 203df4d8b0SPeter Avalos echo "For $code, expected $expected actual $result" 213df4d8b0SPeter Avalos fi 223df4d8b0SPeter Avalos} 233df4d8b0SPeter Avalos 243df4d8b0SPeter Avalos# We follow original ash behaviour for quoted ${var+-=?} expansions: 253df4d8b0SPeter Avalos# a double-quote in one switches back to unquoted state. 263df4d8b0SPeter Avalos# This allows expanding a variable as a single word if it is set 273df4d8b0SPeter Avalos# and substituting multiple words otherwise. 283df4d8b0SPeter Avalos# It is also close to the Bourne and Korn shells. 293df4d8b0SPeter Avalos# POSIX leaves this undefined, and various other shells treat 303df4d8b0SPeter Avalos# such double-quotes as introducing a second level of quoting 313df4d8b0SPeter Avalos# which does not do much except quoting close braces. 323df4d8b0SPeter Avalos 333df4d8b0SPeter Avalostestcase 'set -- "${p+"/et[c]/"}"' '1|/etc/' 343df4d8b0SPeter Avalostestcase 'set -- "${p-"/et[c]/"}"' '1|/et[c]/' 353df4d8b0SPeter Avalostestcase 'set -- "${p+"$p"}"' '1|/etc/' 363df4d8b0SPeter Avalostestcase 'set -- "${p-"$p"}"' '1|/et[c]/' 373df4d8b0SPeter Avalostestcase 'set -- "${p+"""/et[c]/"}"' '1|/etc/' 383df4d8b0SPeter Avalostestcase 'set -- "${p-"""/et[c]/"}"' '1|/et[c]/' 393df4d8b0SPeter Avalostestcase 'set -- "${p+"""$p"}"' '1|/etc/' 403df4d8b0SPeter Avalostestcase 'set -- "${p-"""$p"}"' '1|/et[c]/' 413df4d8b0SPeter Avalostestcase 'set -- "${p+"\@"}"' '1|@' 423df4d8b0SPeter Avalostestcase 'set -- "${p+"'\''/et[c]/'\''"}"' '1|/et[c]/' 433df4d8b0SPeter Avalos 443df4d8b0SPeter Avalostest "x$failures" = x 45