Jest to spowodowane podwójnie cytowaną regułą parsowania ciągów w postaci sh
.
Posix określa, w jaki sposób sh
analizuje ciągi o podwójnych cudzysłowach.
Odwrotny ukośnik zachowuje swoje szczególne znaczenie jako znak ucieczki (patrz Ucieczka znaku (backslash)) tylko wtedy, gdy następuje przez jeden z następujących znaków kiedy uznać specjalny: $ `" \
W inne słowa, sh
lewusuje lewy ukośnik, za którym występują znaki inne niż $ '".
Tak więc, jeśli sh
spełnia podwójnie cytowany ciąg sed "s/\\\/\//"
, sh
analizuje go w następujący sposób.
- Pierwsze dwa
\\
zmieniono na . Ponieważ pierwszy \
następuje po drugim \
.
- Trzeci i czwarty
\
jest nadal pozostawiony w łańcuchu. Ponieważ po obydwu występuje /
, co nie jest specjalną cechą podwójnego cudzysłowu.
Po pasring, sh
przechodzi ciąg s/\\/\//
do sed
, który zastępuje pierwszy wystąpienie \
do /
.
Z tego samego rozumowania, gdy sh
spełnia ciąg, "sed s/\\\\/\//"
, sh
przechodzi /\\/\//
do sed
, który zastępuje także pierwsze wystąpienie \
do /
.
pokaż, co masz – ghostdog74
Nie ma. Pokaż nam, dlaczego tak uważasz. –
to twoja powłoka zużywająca dodatkowy poziom backslashingu? – p00ya