On 01/19/2015 10:51 AM, ZyX wrote: > `..foo` is a valid name, but it is being excluded. You need to add `'.??*'` to the list of patterns. Nice catch. On 01/19/2015 11:02 AM, ZyX wrote: > > And you must replace `[^.]` with `[!.]`. mksh does not support `[^]` and treats this as `[\^.]`, but other shells I have (dash, ksh, zsh (in sh emulation mode), bash, busybox ash) are fine with both `[!.]` and `[^.]`. and again. On 01/19/2015 11:16 AM, ZyX wrote: > emulate -L sh &>/dev/null While this is just an test, it should be pointed out that `&>' is also not defined nor does the same thing in all of the shells you tried. The correct way being `>/dev/null 2>&1'. On 01/19/2015 11:16 AM, ZyX wrote: > Also note that if you need *full* equivalent of *(DN) you need to do something with ordering. That depends on the user's locale, my LC_COLLATE was set to POSIX during my tests and each shell sorted the files the same. Setting LC_COLLATE to en_US.UTF-8 does give me the behavior you mentioned. I don't think there is a correct way to account for that. With: #!/bin/sh ${ZSH_VERSION+false} : || emulate sh match() { test "$#" -gt 2 && return test -e "$1" && return return 1 } set -- for pat in '..?*' '.[!.]*' '*'; do # I moved your added pattern to where POSIX locale would sort them. if match $pat; then set -- "$@" $pat fi done unset pat test "$#" -gt 0 && printf '%s ' "$@" % LC_COLLATE=POSIX % printf '%s ' *(DN) > ../zshdn--set.log % for sh in dash ksh mksh zsh bash bb; do $sh ../foo >../$sh--set.log; done % md5sum ../*--set.log 99970f198535e5fe62aeec1a13ebc639 ../bash--set.log 99970f198535e5fe62aeec1a13ebc639 ../bb--set.log 99970f198535e5fe62aeec1a13ebc639 ../dash--set.log 99970f198535e5fe62aeec1a13ebc639 ../ksh--set.log 99970f198535e5fe62aeec1a13ebc639 ../mksh--set.log 99970f198535e5fe62aeec1a13ebc639 ../zsh--set.log 99970f198535e5fe62aeec1a13ebc639 ../zshdn--set.log % LC_COLLATE=en_US.UTF-8 % printf '%s ' *(DN) > ../zshdn--set.log % for sh in dash ksh mksh zsh bash bb; do $sh ../foo >../$sh--set.log; done % md5sum ../*--set.log 28583c502cf605e105f794a37e1648da ../bash--set.log 28583c502cf605e105f794a37e1648da ../bb--set.log 99970f198535e5fe62aeec1a13ebc639 ../dash--set.log 28583c502cf605e105f794a37e1648da ../ksh--set.log 99970f198535e5fe62aeec1a13ebc639 ../mksh--set.log 4008c14ae7f0b2195c96d330d604ae50 ../zshdn--set.log 28583c502cf605e105f794a37e1648da ../zsh--set.log Strangely, the two zsh tests i did aren't the same.