Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
Re: Equivalent of set -- *(DN) in sh
- X-seq: zsh-users 19749
- From: ZyX <kp-pav@xxxxxxxxx>
- To: Eric Cook <llua@xxxxxxx>, "zsh-users@xxxxxxx" <zsh-users@xxxxxxx>
- Subject: Re: Equivalent of set -- *(DN) in sh
- Date: Mon, 19 Jan 2015 19:02:05 +0300
- 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=
- In-reply-to: <1115311421682921@web6h.yandex.ru>
- List-help: <mailto:zsh-users-help@zsh.org>
- List-id: Zsh Users List <zsh-users.zsh.org>
- List-post: <mailto:zsh-users@zsh.org>
- Mailing-list: contact zsh-users-help@xxxxxxx; run by ezmlm
- References: <CADdV=MvMtwYczr82GeYkmVwTFCKgFcbgYS71XdnHZN_JqFqzTg@mail.gmail.com> <54BC1B8E.5080806@gmx.com> <1102431421682670@web6h.yandex.ru> <1115311421682921@web6h.yandex.ru>
19.01.2015, 18:55, "ZyX" <kp-pav@xxxxxxxxx>:
> 19.01.2015, 18:51, "ZyX" <kp-pav@xxxxxxxxx>:
>> 18.01.2015, 23:53, "Eric Cook" <llua@xxxxxxx>:
>>> 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' "$@"
Messages sorted by:
Reverse Date,
Date,
Thread,
Author