1*13de33a5SJulio Merino 2*13de33a5SJulio Merinounset LC_ALL 3*13de33a5SJulio MerinoLC_CTYPE=en_US.UTF-8 4*13de33a5SJulio Merinoexport LC_CTYPE 5*13de33a5SJulio Merino 6*13de33a5SJulio Merinoc1=e 7*13de33a5SJulio Merino# a umlaut 8*13de33a5SJulio Merinoc2=$(printf '\303\244') 9*13de33a5SJulio Merino# euro sign 10*13de33a5SJulio Merinoc3=$(printf '\342\202\254') 11*13de33a5SJulio Merino# some sort of 't' outside BMP 12*13de33a5SJulio Merinoc4=$(printf '\360\235\225\245') 13*13de33a5SJulio Merino 14*13de33a5SJulio Merinos=$c1$c2$c3$c4 15*13de33a5SJulio Merino 16*13de33a5SJulio Merinotestcase() { 17*13de33a5SJulio Merino code="$1" 18*13de33a5SJulio Merino expected="$2" 19*13de33a5SJulio Merino oIFS="$IFS" 20*13de33a5SJulio Merino eval "$code" 21*13de33a5SJulio Merino IFS='|' 22*13de33a5SJulio Merino result="$#|$*" 23*13de33a5SJulio Merino IFS="$oIFS" 24*13de33a5SJulio Merino if [ "x$result" = "x$expected" ]; then 25*13de33a5SJulio Merino ok=x$ok 26*13de33a5SJulio Merino else 27*13de33a5SJulio Merino failures=x$failures 28*13de33a5SJulio Merino echo "For $code, expected $expected actual $result" 29*13de33a5SJulio Merino fi 30*13de33a5SJulio Merino} 31*13de33a5SJulio Merino 32*13de33a5SJulio Merinotestcase 'set -- "$s"' "1|$s" 33*13de33a5SJulio Merinotestcase 'set -- "${s#$c2}"' "1|$s" 34*13de33a5SJulio Merinotestcase 'set -- "${s#*}"' "1|$s" 35*13de33a5SJulio Merinotestcase 'set -- "${s#$c1}"' "1|$c2$c3$c4" 36*13de33a5SJulio Merinotestcase 'set -- "${s#$c1$c2}"' "1|$c3$c4" 37*13de33a5SJulio Merinotestcase 'set -- "${s#$c1$c2$c3}"' "1|$c4" 38*13de33a5SJulio Merinotestcase 'set -- "${s#$c1$c2$c3$c4}"' "1|" 39*13de33a5SJulio Merinotestcase 'set -- "${s#?}"' "1|$c2$c3$c4" 40*13de33a5SJulio Merinotestcase 'set -- "${s#??}"' "1|$c3$c4" 41*13de33a5SJulio Merinotestcase 'set -- "${s#???}"' "1|$c4" 42*13de33a5SJulio Merinotestcase 'set -- "${s#????}"' "1|" 43*13de33a5SJulio Merinotestcase 'set -- "${s#*$c3}"' "1|$c4" 44*13de33a5SJulio Merinotestcase 'set -- "${s%$c4}"' "1|$c1$c2$c3" 45*13de33a5SJulio Merinotestcase 'set -- "${s%$c3$c4}"' "1|$c1$c2" 46*13de33a5SJulio Merinotestcase 'set -- "${s%$c2$c3$c4}"' "1|$c1" 47*13de33a5SJulio Merinotestcase 'set -- "${s%$c1$c2$c3$c4}"' "1|" 48*13de33a5SJulio Merinotestcase 'set -- "${s%?}"' "1|$c1$c2$c3" 49*13de33a5SJulio Merinotestcase 'set -- "${s%??}"' "1|$c1$c2" 50*13de33a5SJulio Merinotestcase 'set -- "${s%???}"' "1|$c1" 51*13de33a5SJulio Merinotestcase 'set -- "${s%????}"' "1|" 52*13de33a5SJulio Merinotestcase 'set -- "${s%$c2*}"' "1|$c1" 53*13de33a5SJulio Merinotestcase 'set -- "${s##$c2}"' "1|$s" 54*13de33a5SJulio Merinotestcase 'set -- "${s##*}"' "1|" 55*13de33a5SJulio Merinotestcase 'set -- "${s##$c1}"' "1|$c2$c3$c4" 56*13de33a5SJulio Merinotestcase 'set -- "${s##$c1$c2}"' "1|$c3$c4" 57*13de33a5SJulio Merinotestcase 'set -- "${s##$c1$c2$c3}"' "1|$c4" 58*13de33a5SJulio Merinotestcase 'set -- "${s##$c1$c2$c3$c4}"' "1|" 59*13de33a5SJulio Merinotestcase 'set -- "${s##?}"' "1|$c2$c3$c4" 60*13de33a5SJulio Merinotestcase 'set -- "${s##??}"' "1|$c3$c4" 61*13de33a5SJulio Merinotestcase 'set -- "${s##???}"' "1|$c4" 62*13de33a5SJulio Merinotestcase 'set -- "${s##????}"' "1|" 63*13de33a5SJulio Merinotestcase 'set -- "${s##*$c3}"' "1|$c4" 64*13de33a5SJulio Merinotestcase 'set -- "${s%%$c4}"' "1|$c1$c2$c3" 65*13de33a5SJulio Merinotestcase 'set -- "${s%%$c3$c4}"' "1|$c1$c2" 66*13de33a5SJulio Merinotestcase 'set -- "${s%%$c2$c3$c4}"' "1|$c1" 67*13de33a5SJulio Merinotestcase 'set -- "${s%%$c1$c2$c3$c4}"' "1|" 68*13de33a5SJulio Merinotestcase 'set -- "${s%%?}"' "1|$c1$c2$c3" 69*13de33a5SJulio Merinotestcase 'set -- "${s%%??}"' "1|$c1$c2" 70*13de33a5SJulio Merinotestcase 'set -- "${s%%???}"' "1|$c1" 71*13de33a5SJulio Merinotestcase 'set -- "${s%%????}"' "1|" 72*13de33a5SJulio Merinotestcase 'set -- "${s%%$c2*}"' "1|$c1" 73*13de33a5SJulio Merino 74*13de33a5SJulio Merinotest "x$failures" = x 75