fun match { set res = $($1 $2) if [ $res != $3 ] { echo "match $1 $2: expected $3, got $res" } } fun x1 { case $1 { a(?!x)x { echo yes } .* { echo no } } } match x1 a no match x1 aa no match x1 ax no match x1 axx no match x1 aax no fun x3 { case $1 { x(?!(a|b)).* { echo yes } .* { echo no } } } match x3 x yes match x3 xa no match x3 xb no match x3 xax no match x3 xbx no match x3 xxa yes match x3 xxb yes match x3 xfoobar yes fun x4 { case $1 { x(?!a).* { echo yes } .* { echo no } } } match x4 x yes match x4 xa no match x4 xy yes