GNU/Linux >> Linux Esercitazione >  >> Linux

The Magic ~:espansione di Bash Tilde con 5 esempi

La shell Bash fornisce alcune variabili che sono precedute da '~' (denominate tilde), chiamate Tilde Expansions.

Sono sinonimi di contenuti di altre variabili all'interno della tua shell.

L'espansione di Tilde è il processo di conversione di queste abbreviazioni nei nomi delle directory che rappresentano. In questo articolo, esaminiamo la funzione di espansione della tilde con gli esempi.

L'espansione della tilde si applica ai caratteri '~' più include +, – e N (che è un numero intero) fino a spazi bianchi o una barra .

L'espansione tilde viene utilizzata per espandersi a diversi percorsi specifici:

  • Elenchi principali
  • Directory di lavoro attuale/precedente
  • Directory dallo stack di directory.

Elenchi principali

L'espansione di Tilde fornisce un modo per espandere la directory home dell'utente corrente o la directory home del nome utente specificato.

Syntax

~ Expand to the variable $HOME or home directory of the current user

~USER Expand to the home directory of the given username

Esempio 1. Home degli utenti correnti

Tilde(~) come parola separata, si espande in $HOME se è definita, se $HOME non è definita, si espande con la directory home dell'utente corrente.

Ora il valore della variabile HOME è /home/oracle, quindi cd ~ ha cambiato la directory corrente nel valore di $HOME.

## Logging into a oracle user, whose home directory is /home/oracle
# su oracle
[tmp]$ pwd
/tmp

[tmp]$ echo $HOME
/home/oracle

[tmp]$ cd ~

[~]$ pwd
/home/oracle

HOME viene modificato in /sbin e cd ~ utilizza solo $HOME non la directory home dell'utente. Dopo aver deimpostato il valore di $HOME, cd ~ ha cambiato la directory nel valore della directory home impostata per l'utente Oracle in /etc/passwd. Per l'espansione di Tilde, HOME sovrascrive la vera home directory.

[~]$ export HOME=/sbin

[oracle]$ cd ~

[~]$ pwd
/sbin

[~]$ unset HOME

[sbin]$ cd ~

[oracle]$ pwd
/home/oracle

Esempio 2. Directory principale dell'utente specificato

Lo script seguente esegue il backup di un file di registro con la data corrente nel nome. Registra anche l'ora di inizio e l'ora di fine nel file chiamato backup.log nella home directory dell'utente Oracle.

#! /bin/bash

echo "Initiating the backup at `date`" >> ~oracle/backup.log

da=`date +%F`
cp $da.log{,.bak}

echo "END BACKUP at `date`" >> ~oracle/backup.log

$ ls -l /home/oracle/
total 8
-rw-r--r-- 1 root   root       99 Jun  4 14:23 backup.log

Se il nome utente specificato non esiste, non si espande in qualcosa. Nell'esempio seguente non è presente alcun utente chiamato ora. Quindi, ~ora non si espanderà in /home/ora.

$ echo ~ora
~ora

Fare riferimento al nostro articolo precedente per capire come eseguire l'espansione delle parentesi graffe in bash. cioè come usare { } in bash.

Directory di lavoro

Tilde con + e – sono usati per rappresentare le directory di lavoro.

  • ~+ si espande al valore della variabile PWD che contiene la directory di lavoro corrente.
  • ~- si espande al valore della variabile OLDPWD, che contiene la directory di lavoro precedente. Se OLDPWD non è impostato, ~- non viene espanso.

Esempio 3. Espansione di directory di lavoro vecchie/attuale

L'esempio seguente confronterà il file nella directory corrente e la directory di lavoro precedente.

$ cat comp.sh
#! /bin/bash

set -x
cd /var/opt/gg
if [ -f gg.c ]
then
echo "File1 exists"
fi

cd /var/opt1/gg
if [ -f gg.c ]
then
echo "File2 exists"
cmp ~+/gg.c ~-/gg.c
fi

$ ./comp.sh
+ cd /var/opt/gg
+ '[' -f gg.c ']'
+ echo 'File1 exists'
File1 exists
+ cd /var/opt1/gg
+ '[' -f gg.c ']'
+ echo 'File2 exists'
File2 exists
+ cmp /var/opt1/gg/gg.c /var/opt/gg/gg.c
cmp: EOF on /var/opt1/gg/gg.c
$

Nell'esecuzione di cui sopra:

  • ~+/gg.c si espande in /var/opt1/gg/gg.c
  • ~-/gg.c si espande in /var/opt/gg/gg.c

Questo articolo fa parte della serie in corso di Bash Tutorial.

Espansione per le directory nello stack

Ciascun processo bash contiene un oggetto stack che può essere utilizzato per tenere traccia delle directory che uno script ha visitato durante l'elaborazione dei dati del contenuto delle directory.

È un meccanismo molto semplice per poter fare riferimento a directory o per tornare alle directory visitate in precedenza. L'espansione di Tilde fornisce anche l'espansione alle directory nello stack di directory.

  • ~+N Espande l'ennesima directory nello stack di directory (contando da sinistra dell'elenco stampato da dirs quando viene richiamato senza opzioni), partendo da zero.
  • ~-N Espande l'ennesima directory nello stack di directory (contando da destra dell'elenco stampato da dirs quando viene richiamato senza opzioni), a partire da zero.

Consulta il nostro articolo precedente per capire come utilizzare i comandi dirs, pushd e popd per manipolare lo stack di directory.

Esempio 4. Visualizza l'ennesima directory da sinistra usando ~+

Nell'esempio seguente, lo stack di directory ha 4 directory. ~+2 ti dà il percorso della directory disponibile nella seconda posizione da sinistra a partire da zero.

$ dirs -v
 0  /sbin
 1  /var/opt/midas
 2  /var/opt/GG/bin
 3  /root

$ cd ~+2

$ pwd
/var/opt/GG/bin

Ma in cima allo stack (posizione zero) avrà sempre la directory corrente. Quindi, dopo l'esecuzione di cui sopra, nello stack di directory viene mostrato quanto segue.

$  dirs -v
 0  /var/opt/GG/bin
 1  /var/opt/midas
 2  /var/opt/GG/bin
 3  /root

Esempio 5. Visualizza l'ennesima directory da destra usando ~-

Di seguito è simile all'esempio sopra. Ma prenderà in considerazione le directory dal fondo dello stack a causa di ~-.

$ dirs -v
 0  /var/opt/GG/bin
 1  /var/opt/midas
 2  /var/opt/GG/bin
 3  /root

$ cd ~-2

$ pwd
/var/opt/midas

$ dirs -v
 0  /var/opt/midas
 1  /var/opt/midas
 2  /var/opt/GG/bin
 3  /root

Linux
  1. Usando –exclude con il comando Du?

  2. `~#` è un'espansione di Tilde di Bash?

  3. Il tutorial Ultimate Bash Array con 15 esempi

  4. Come cambio la directory in Git Bash con Git per Windows?

  5. '&&' vs. '&' con il comando 'test' in Bash

Il tutorial del comando fc con esempi per principianti

Comando Bash Echo spiegato con esempi in Linux

Reindirizzamento Bash spiegato con esempi

Bash Scripting:funzioni spiegate con esempi

Bash Scripting:variabili spiegate con esempi

Bash If Else Sintassi con esempi