Ciò è dovuto alla regola di analisi delle stringhe con virgolette sh
.
Posix specifica come sh
analizza le stringhe con doppie virgolette.
Il backslash conserva il suo significato speciale come carattere di escape (vedi fuga Character (Backslash)) solo quando seguito da uno dei seguenti caratteri quando considerato speciale: $ `" \
In altre parole, sh
sinistre, il backslash seguito da caratteri diversi da $ '".
Quindi, se sh
incontra la stringa con doppia citazione sed "s/\\\/\//"
, sh
la analizza come segue.
- I primi due
\\
è cambiato in \
. Perché il primo \
è seguito dal secondo \
.
- Il terzo e il quarto
\
sono ancora lasciati nella stringa. Perché entrambi sono seguiti da /
, che non è speciale nella stringa doppia citazione.
Dopo pasring, sh
passa la stringa s/\\/\//
a sed
, che sostituisce la prima occorrenza di \
in /
.
Con lo stesso ragionamento, quando sh
incontra la stringa, "sed s/\\\\/\//"
, sh
passa /\\/\//
a sed
, che sostituisce anche la prima occorrenza di \
in /
.
fonte
2014-06-20 03:35:21
mostra quello che hai – ghostdog74
Non lo fa. Mostraci perché pensi che sia così. –
la shell sta consumando un ulteriore livello di backslashing? – p00ya