Discussione:
sh quoting ed escaping
(troppo vecchio per rispondere)
Stefano L.
2024-04-18 09:41:53 UTC
Permalink
Ciao,

$ echo Questo è chiaro \"
Questo è chiaro "

$ echo Questo è chiaro \'
Questo è chiaro '

$ echo "Questo è chiaro \""
Questo è chiaro "

$ echo "Questo non lo capisco \'"
Questo non lo capisco \'

Perché diamine nell'ultimo caso visualizza anche il backslash ?
--
Stefano L.
Stefano L.
2024-04-18 13:25:33 UTC
Permalink
Post by Stefano L.
Ciao,
$ echo Questo è chiaro \"
Questo è chiaro "
$ echo Questo è chiaro \'
Questo è chiaro '
$ echo "Questo è chiaro \""
Questo è chiaro "
$ echo "Questo non lo capisco \'"
Questo non lo capisco \'
Perché diamine nell'ultimo caso visualizza anche il backslash ?
Mannaggia ho trovato !

Dal manuale bash:


Enclosing characters in double quotes (‘"’) preserves the literal value
of all characters within the quotes, with the exception of ‘$’, ‘`’, ‘\’

e in base a questo non capivo, però più sotto c'è scritto

The backslash retains its special meaning only when followed by one of the
following characters: ‘$’, ‘`’, ‘"’, ‘\’, or newline.
Within double quotes, backslashes that are followed by one of these characters
are removed.
Backslashes preceding characters without a special meaning are left unmodified

Quindi tra i doppi apici il backslash mantiene la sua funzione di escaping..
ma non sempre, solo in alcuni casi.

Va a capire perché :(
--
Stefano L.
MarioCCCP
2024-04-18 18:44:14 UTC
Permalink
Post by Stefano L.
Ciao,
$ echo Questo è chiaro \"
Questo è chiaro "
$ echo Questo è chiaro \'
Questo è chiaro '
$ echo "Questo è chiaro \""
Questo è chiaro "
$ echo "Questo non lo capisco \'"
Questo non lo capisco \'
Perché diamine nell'ultimo caso visualizza anche il backslash ?
premesso che sono stato altrettanto sorpreso quanto te, e
dopo avere riletto il manuale citato ...
credo che succeda perché
sia nel caso "...'..." che nel caso '..."...'
la citazione pari (encloser) tolga lo status di carattere di
citazione a quella, dispari, enclosed.
E a quel punto, se non è più un carattere speciale, ma è
stato reso ordinario, il backslash perde la sua funzione di
escaparlo

$ echo 'Questo non lo capisco \"'
Questo non lo capisco \"

$ echo 'Questo non lo capisco \$'
Questo non lo capisco \$

anche qui, alcuni caratteri speciali, che per il contesto,
perdono lo status di specialità, e quindi non richiedono
escaping, causano il fatto che anche la \ che li escaperebbe
non serva più per quella funzione, e si assume che serva tal
quale, penserei ... il mio penny profano




--
1) Resistere, resistere, resistere.
2) Se tutti pagano le tasse, le tasse le pagano tutti
Yoda
2024-04-18 23:55:09 UTC
Permalink
Post by Stefano L.
$ echo "Questo non lo capisco \'"
Questo non lo capisco \'
Perché diamine nell'ultimo caso visualizza anche il backslash ?
I doppi proteggono gia' il singolo (come i singoli proteggono il doppio),
dunque, essendo protetti entrambi, \' diventano due caratteri comuni,
come fossero ab.

Divertiti a capire queste:
$: echo "\"
$: echo " \"
$: echo "\ "
$: echo "\a"
$: echo "\'"
$: echo "\"
eccetera eccetera eccetera.. l'idea guida viene dalla seguente:
$ echo "a <invio>
Post by Stefano L.
pippo <invio>
" <invio>
a
pippo

ciao
--
Yoda
Loading...