Hey. Assuming a pattern of: [.*^\] my understanding was that this would actually mean: - the literal string [. followed by - the pattern notation special character * (i.e. any string) followed by - the literal string ^] Because ] is escaped, it's to be taken literally and in a pattern a [ without corresponding ] is to be taken literally as well. That seems to work in dash: $ case '[.^]' in ([.*^\]) echo match;; (*) echo no match;; esac match $ case '[.x^]' in ([.*^\]) echo match;; (*) echo no match;; esac match $ case '[.xx^]' in ([.*^\]) echo match;; (*) echo no match;; esac match However, adding another [ to the pattern: [.*^[\] which should be: - the literal string [. followed by - the pattern notation special character * (i.e. any string) followed by - the literal string ^[] No longer matches: $ case '[.^[]' in ([.*^[\]) echo match;; (*) echo no match;; esac no match $ case '[.x^[]' in ([.*^[\]) echo match;; (*) echo no match;; esac no match $ case '[.xx^[]' in ([.*^[\]) echo match;; (*) echo no match;; esac no match Whereas, AFAIU POSIX, it should. This works, btw. in bash, but neither in busybox sh, nor klibc sh. Cheers, Chris.