[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

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: