Quotes should disable the special meaning of characters in glob patterns[*]. So this:
case b in ( ['a-c'] ) echo 'false match' ;; ( [a-c] ) echo 'correct match' ;; esac should output "correct match". But on zsh and AT&T ksh93 (and only those), it outputs "false match". Meaning, quoting the characters within the bracket pattern does not disable the special meaning of '-' in the bracket pattern. This hinders a realistic use case: the ability to pass a series of arbitrary characters in a variable for use within a bracket pattern. Quoting the variable does not have any effect; if the series contains a '-', the result is unexpected. For example: mychars='abs$ad-f3ra' # arbitrary series of characters containing '-' somevar=qezm # this contains none of the characters above case $somevar in ( *["$mychars"]* ) echo "$somevar contains one of $mychars" ;; esac produces a false positive on zsh and ksh93. A workaround is to make sure the '-', if any, is always last in the string of characters to match against. The same thing also affects glob patterns in other contexts, e.g. removing characters using parameter substitution. Other shells, at least bash, (d)ash variants, pdksh, mksh and yash, all act like POSIX says they should, according to my tests. Thanks, - Martijn [*] "If any character (ordinary, shell special, or pattern special) is quoted, that pattern shall match the character itself." http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_13_01 _______________________________________________ ast-developers mailing list ast-developers@lists.research.att.com http://lists.research.att.com/mailman/listinfo/ast-developers