Primo caso:
echo $'$foo'
Which echos $foo
(ovvero il primo $
nel mio comando echo viene eliminato)
Il primo $
viene eseguito come comando. L'eco non richiede spazi tra gli argomenti, li prende semplicemente.
Quindi echo si $'$foo'
espande per eseguire il comando $
(che non è un comando quindi lo ignora) e quindi echo '$foo'
. Qualsiasi cosa ''
viene presa al valore nominale - non la espande o altro. Puoi mettere quello che vuoi in '' e non succede nulla.
Se lo si sostituisce $
con $$
echo l'ID del processo.
Secondo:
echo $"$foo"
Questo eco pwd
(che significa che la bash si espande $foo
, la mia variabile, al suo valore)
Questo perché ""
non impedisce che si espanda. ""
viene normalmente utilizzato per garantire che vi sia un valore da confrontare.
Se hai una variabile che potrebbe essere vuota (ad es. Da un grep
risultato), allora vuoi confrontarla con un altro valore / variabile, devi inserire la prima variabile ""
. Questo assicura che ci sia sempre un confronto da verificare, piuttosto che solo una sezione vuota del codice (come vede bash) che dà un errore.
Infine, il numero 3. Questo è interessante.
echo $`$foo`
Questo eco $~/scripts
(mi aspettavo che stampasse ~/scripts
e non $~/scripts
)
Questo perché (in questo caso) l'eco sta stampando $
prima il personaggio. Mettere qualcosa nei backtick fa sì che il valore della variabile venga eseguito come comando (il modo migliore per farlo nelle versioni più recenti di bash è $(command)
)
Quindi prima echo $
poi si espande `$foo`
a `pwd`
cui viene eseguito e ritorna ~/Scripts
. Ma avevamo la $
stampa in precedenza - quindi l'intero risultato è $~/Scripts
.