Cosa fa il piccolo squiggly ~ in Linux?


25

Ne ho usati due esempi e mi chiedo cosa faccia ciascuno:

  1. service=~

  2. mv ~/Desktop/Service$version.tgz $service

Cosa fa il piccolo cigolio ~?

Quindi, dopo quello, cosa farebbe cd $service?


3
questo merita quindi un tag [squiggly]
cregox

3
Tilde, è specifico per la shell e non specifico per Linux.
David Allan Finch,

@Cawas: chiedi e riceverai.
Dave Sherohman,

@Dave grazie! Ma sembra che Chris lo odiasse. Oh bene, la vita continua ...
cregox,

È davvero la prima volta che ti viene chiesto? Mi aspettavo che questo fosse chiuso come duplicato.
Erik B,

Risposte:


45

La cosa agitata si chiama "tilde".

Si espande nella tua home directory.

Provare

echo ~
echo $HOME

Entrambe le istruzioni mettono la tua home directory da sola su una linea ..

Vedi bash Tilde Expansion per i dettagli.


8
Il confronto sopra, sebbene valido, è forse fuorviante: la tilde funziona solo durante l'interpretazione della shell negli script e dalla riga di comando. La variabile d'ambiente, $ HOME, tuttavia, funziona ovunque funzioni una variabile d'ambiente - che è molto più spazio.
Mei,

36

Lo "squiggly" si chiama tilde. Viene utilizzato per fare riferimento alla directory home che su Linux è normalmente /home/username . Inoltre è memorizzato nella $HOMEvariabile d'ambiente. L'espansione nella ~posizione della directory home è il lavoro della shell (come zsh o bash) o del file manager (come Nautilus) e non del filesystem o del sistema operativo.

Puoi anche usarlo per fare riferimento alla home directory di un altro utente. Ad esempio, se il nome utente dell'altro utente è bob, è possibile fare riferimento alla loro home directory con ~bob, che verrà espansa in /home/bob/.

Il primo esempio che hai fornito imposta la variabile servicesu ~, quindi corrisponde alla tua home directory. Questo è equivalente a service=/home/usernameo service=$HOME.

Il secondo esempio copia il file ~/Desktop/Service$version.tgz(o /home/username/Desktop/Service$version.tgz) in /home/username. Questo comando è equivalente a:

mv ~/Desktop/Service$version.tgz ~

o

mv ~/Desktop/Service$version.tgz $HOME

o

mv ~/Desktop/Service$version.tgz /home/username/

Il terzo cambierà la directory di lavoro corrente ( $PWD) in /home/username/. Ciò equivale a:

cd /home/username/

o

cd $HOME

3
Un'altra cosa da tenere a mente: l'espansione di Tilde è il lavoro della shell o del filemanager, non è una funzione del file system Linux stesso. Quindi spesso non funzionerà nei file di configurazione e aggiungendo virgolette intorno a "~" interromperà la sua espansione nella shell.
Grumbel,

3
Va anche notato che le home directory non si trovano necessariamente in / home, quindi non si deve presumere che ~ si espanda in / home / [il mio nome utente] o che ~ bob si espanda in / home / bob
darkliquid

Grazie per il suggerimento @Grumbel. E grazie @PriceChild per aver aggiunto il suggerimento di @ darkliquid!
Wuffers,

10

In # 1 e # 2: ~ è la tua directory home, quindi se sei qwerty probabilmente sarà la directory / home / qwerty. Quindi prova ls ~a vederlo.

Per # 1: mi sembra che il servizio variabile sia stato definito come home directory.

Ciò significa che dopo che # 2 ha spostato il file tgz dalla sottodirectory Desktop nella directory principale, il numero 3 passa alla directory principale.


5

Sembra che i comandi stiano facendo quanto segue.

  1. Assegnare una variabile chiamata servizio alla posizione della cartella principale, ad esempio:

    /home/user
    
  2. Sposta il file dal desktop al livello superiore della home directory, ad esempio:

    /home/user/Desktop/Service$version.tgz $service
    
  3. Lo script quindi modifica la directory al livello principale della home directory.

Quindi, tutto lo script che sta facendo è semplicemente ripulire il desktop spostando il file nella /home/usercartella.


1

Aggiungerò qui che ~ utente espande anche a [utente] 's home directory, quindi non è solo una scorciatoia per la propria directory home.

Per esempio:

[guy@abox anotherdir]$ cd ~ 
[guy@abox ~]$ pwd
/home/guy
[guy@abox ~]$ cd ~john
[guy@abox john]$ pwd
/home/john
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.