Re: переменные $1

Slawa Olhovchenkov slw на zxy.spb.ru
Ср Апр 22 16:14:05 UTC 2020


On Wed, Apr 22, 2020 at 06:59:21PM +0300, Maxim Dounin wrote:

> Hello!
> 
> On Wed, Apr 22, 2020 at 06:15:07PM +0300, Slawa Olhovchenkov wrote:
> 
> > On Wed, Apr 22, 2020 at 05:39:23PM +0300, Maxim Dounin wrote:
> > 
> > > Hello!
> > > 
> > > On Wed, Apr 22, 2020 at 04:31:02PM +0300, Slawa Olhovchenkov wrote:
> > > 
> > > > А это нормально что переменные $1..$N не являются локальными для
> > > > регэкспа?
> > > > 
> > > > Т.е. если например у нас есть rewrite и там что-то захватывается, а в
> > > > результате используется еще и результат map с регэкспом, то $1 будет
> > > > браться из map.
> > > > Что-то мне кажется это не логично.
> > > 
> > > Это следствие того, что regexp и использование $1..$N могут быть 
> > > разнесены, например, в конструкциях вида (цитата из 
> > > http://nginx.org/r/if):
> > > 
> > >     if ($http_cookie ~* "id=([^;]+)(?:;|$)") {
> > >         set $id $1;
> > >     }
> > > 
> > > Для rewrite'а это, конечно, не нормально, надо править.  Про это 
> > > даже есть тикет:
> > 
> > не для rewrite, а для map.
> > вроде как логично ожидать, что map срабатывает выдавая указанную
> > переменную без каких-либо дополнительных побочных эффектов.
> 
> Ну да, одно из возможных решений - отучить регулярные выражения в 
> map'е трогать $1..$N.  С другой стороны - конфигурации вида
> 
>     map $uri $foo {
>         ~(.+) $1;
>     }
> 
> тоже никто не отменял.

не понимаю возражения.
я как раз о том, что внури map $1..$N локальные и не портят $1..$N в
других местах. очевидно же, что вот этот $1 _вне_ map никому не нужен.
$foo сформировался и никому ничего больше от этого map не требуется.

> > > https://trac.nginx.org/nginx/ticket/564
> > > 
> > > Patches are welcome.
> > 
> > 6 лет...
> 
> Да, за 6 лет никто не сподобился даже попытаться прислать патч.  
> Что как бы позволяет предложить, что - не жмёт.

или никто не может разобраться.


Подробная информация о списке рассылки nginx-ru