From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 12177 invoked by alias); 19 Jan 2015 16:07:57 -0000 Mailing-List: contact zsh-users-help@zsh.org; run by ezmlm Precedence: bulk X-No-Archive: yes List-Id: Zsh Users List List-Post: List-Help: X-Seq: 19749 Received: (qmail 15610 invoked from network); 19 Jan 2015 16:07:55 -0000 X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on f.primenet.com.au X-Spam-Level: X-Spam-Status: No, score=-2.7 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,RCVD_IN_DNSWL_LOW,T_FSL_HELO_BARE_IP_2 autolearn=ham version=3.3.2 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yandex.ru; s=mail; t=1421683326; bh=yBdA9BRiMYTPcs/7SucreGPj7+rwUJJN7k/YiCtnd9M=; h=From:To:In-Reply-To:References:Subject:Date; b=VQJjo5CDwq5Ga8rIwtfT9BD8RZ9El/npzWY8EAQ8ayjxjbAIfBQHsO40ZA8shDgsW E5UBf5td5o11etPTUFOyQalEwIrShHJRgOTaV18alCkEZFiSlM6B67RontN6oZrZy2 Lq/NsMcts0Kn0mH94Uo7Grncea7RCm7zxOd4QcM8= From: ZyX To: Eric Cook , "zsh-users@zsh.org" In-Reply-To: <1115311421682921@web6h.yandex.ru> References: <54BC1B8E.5080806@gmx.com> <1102431421682670@web6h.yandex.ru> <1115311421682921@web6h.yandex.ru> Subject: Re: Equivalent of set -- *(DN) in sh MIME-Version: 1.0 Message-Id: <1136081421683325@web6h.yandex.ru> X-Mailer: Yamail [ http://yandex.ru ] 5.0 Date: Mon, 19 Jan 2015 19:02:05 +0300 Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset=utf-8 19.01.2015, 18:55, "ZyX" : > 19.01.2015, 18:51, "ZyX" : >>  18.01.2015, 23:53, "Eric Cook" : >>>   On 01/18/2015 01:28 PM, Nikolai Weibull wrote: >>>>    Hi! >>>> >>>>    Is there any way to get the equivalent of Zsh’s >>>> >>>>    set -- *(DN) >>>> >>>>    in sh?  Most important here would be NULL_GLOB, as, by default, sh >>>>    simply leaves the * if there are no files to match. >>>> >>>>    Thanks! >>>   match() { >>>     test "$#" -gt 2 && return >>>     test -e "$1"    && return >>>     return 1 >>>   } >>> >>>   set -- >>>   for pat in '.[^.]*' '*'; do # *(DN) ignores . and .. >>  `..foo` is a valid name, but it is being excluded. You need to add `'.??*'` to the list of patterns. > > No, this may make duplicates. Then `'..?*'`. 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 `[^.]`. >>>     if match $pat; then >>>       set -- "$@" $pat >>>     fi >>>   done >>>   unset pat >>> >>>   test "$#" -gt 0 && printf '%s\n' "$@"