Re: zsh
On Fri, Aug 01, 2008 at 10:42:36PM +0400, Artem Chuprina wrote:
> Stanislav Maslovski -> debian-russian@lists.debian.org @ Fri, 1 Aug 2008 20:06:05 +0400:
>
> >> >> SM> % rm TEST=\'\*\'
> >> >> SM> [shota@stas:/tmp/a]
> >> >> SM> % eval `./test`
> >> >> SM> zsh: no matches found: TEST='*'
> >> >> SM> [shota@stas:/tmp/a]
> >> >> SM> % echo "$TEST"
> >> >>
> >> >> SM> ================================================================
> >> >>
> >> >> SM> Ы?
> >> >>
> >> >> man zshexpn
> >> >> /^COMMAND SUBSTITUTION
> >> >> последнее предложение
> >>
> >> SM> Это хорошо, но почему за паттерн берется целиком TEST='*'?
> >>
> >> По той же причине, по которой, когда ты пишешь echo .xsession-*, за
> >> паттерн берется целиком .xsession-*. А что?
>
> SM> Но ведь из примера видно, что шелл при _найденном_ совпадении вовсе не
> SM> пытается запустить файл "TEST='*'" (и совсем не это у шелла просят),
> SM> а твое объяснение подходит как раз под такую семантику.
>
> При ненайденном совпадении он тоже не пытается его запустить.
>
> SM> Причем тут no matches found при отсутствии какого-то совершенно
> SM> не имеющего отношения к делу файла? Поясни.
>
> Ты вообще прочел, что такое filename generation? Судя по вопросу про
> паттерн - прочел.
>
> Итак. Подробно.
[ skipped ]
Спасибо. Механику эту я способен понять и самостоятельно, хотя, как
выясняется, я склонен приписывать текстам несуществующие сущности ;)
> zsh% echo TEST='*'
> TEST=*
> zsh% echo TEST=\'*\'
> zsh: no matches found: TEST='*'
Бог с ним, с эхо. Меня заинтересовало, что в ожидаемом мной контексте eval,
в частности, когда я пытаюсь присвоить некое значение параметру TEST,
я, к удивлению своему, обнаруживаю, что оно зависит от наличия или отсутствия
в текущей директории какого-то не имеющего отношения к делу файла.
Что мне и показалось странным. В итоге выяснилось, что и bash поступает также.
Воистину, пока сам на грабли не наступишь, в голове прояснения не появится.
> То бишь, если ты в оригинале сделашь не файл TEST='*' (с именем, в
> точности соответствующим, так получилось, шаблону), а TEST='111' и
> TEST='', то ты получишь два слова в выводе, и ни одно из них не будет
> TEST='*'.
Проверил пример. Да, так все и происходит.
--
Stanislav
Reply to:
- Follow-Ups:
- Re: zsh
- From: Stanislav Maslovski <stanislav.maslovski@gmail.com>
- Re: zsh
- From: Artem Chuprina <ran@ran.pp.ru>
- References:
- zsh
- From: Stanislav Maslovski <stanislav.maslovski@gmail.com>
- Re: zsh
- From: Artem Chuprina <ran@ran.pp.ru>
- Re: zsh
- From: Stanislav Maslovski <stanislav.maslovski@gmail.com>
- Re: zsh
- From: Artem Chuprina <ran@ran.pp.ru>
- Re: zsh
- From: Stanislav Maslovski <stanislav.maslovski@gmail.com>
- Re: zsh
- From: Artem Chuprina <ran@ran.pp.ru>