On Fri, Aug 01, 2008 at 10:42:36PM +0400, Artem Chuprina wrote: > Stanislav Maslovski -> [email protected] @ Fri, 1 Aug 2008 > 20:06:05 +0400: > > >> >> SM> % rm TEST=\'\*\' > >> >> SM> [EMAIL PROTECTED]:/tmp/a] > >> >> SM> % eval `./test` > >> >> SM> zsh: no matches found: TEST='*' > >> >> SM> [EMAIL PROTECTED]:/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 -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]

