GNU/Linux >> Linux Esercitazione >  >> Linux

Perché The Tilde (~) non si espande all'interno di virgolette doppie?

In base a questa risposta e alla mia comprensione, la tilde si espande nella directory home:

$ echo ~
/home/braiam

Ora, ogni volta che voglio che l'espansione della shell funzioni, io. e. usando nomi di variabili come $FOO , e non interrompere a causa di caratteri imprevisti, tali spazi, ecc. si dovrebbero usare le virgolette " :

$ FOO="some string with spaces"
$ BAR="echo $FOO"
$ echo $BAR
echo some string with spaces

Perché questa espansione non funziona con la tilde?

$ echo ~/some/path
/home/braiam/some/path
$ echo "~/some/path"
~/some/path

Risposta accettata:

Il motivo, perché tra virgolette doppie, tilde ~ non ha un significato speciale, è trattato come letterale.

POSIX definisce le virgolette doppie come:

I caratteri racchiusi tra virgolette doppie ( “” ) conservano il
valore letterale di tutti i caratteri all'interno delle virgolette doppie, con l'
eccezione dei caratteri simbolo del dollaro, virgolette e barra rovesciata,

La domanda deve garantire che una doppia virgoletta sia preceduta da una
barra rovesciata da includere tra virgolette doppie. Il parametro '@' ha
un significato speciale tra virgolette doppie

Tranne $ , ` , e @ , gli altri caratteri vengono trattati come letterali tra virgolette doppie.


Linux
  1. Perché le pagine man di Unix usano i doppi backtick al posto delle doppie virgolette?

  2. Perché `md5sum` non fornisce lo stesso hash di Internet?

  3. Qual è la differenza tra punto e virgola e doppia e commerciale &&?

  4. Quotes Inside Backticks Inside Quotes In Ksh?

  5. Come vedere l'esatta riga di comando eseguita all'interno di alcune istanze Bash?

Perché il ~/.bash_profile non funziona?

Caratteri jolly all'interno delle citazioni?

Perché "sudo Su" in uno script di shell non esegue il resto dello script come root?

Perché Ls -l non mostra l'ora e l'anno per ogni file??

Perché Apt-get Autoremove non rimuove i vecchi kernel?

come rimuovere le virgolette doppie in un csv