GNU/Linux >> LINUX-Kenntnisse >  >> Linux

The Magic ~:Bash Tilde Erweiterung mit 5 Beispielen

Die Bash-Shell bietet einige Variablen mit vorangestelltem '~' (namens Tilde), die als Tilde-Erweiterungen bezeichnet werden.

Sie sind Synonyme für den Inhalt anderer Variablen in Ihrer Shell.

Tilde-Erweiterung ist der Prozess der Umwandlung dieser Abkürzungen in die Verzeichnisnamen, für die sie stehen. Lassen Sie uns in diesem Artikel die Tilde-Erweiterungsfunktion anhand von Beispielen überprüfen.

Die Tilde-Erweiterung gilt für die „~“-Pluszeichen, einschließlich +, – und N (das eine ganze Zahl ist) bis hin zu Leerzeichen oder einem Schrägstrich .

Die Tilde-Erweiterung wird verwendet, um auf mehrere spezifische Pfadnamen zu erweitern:

  • Home-Verzeichnisse
  • Aktuelles/vorheriges Arbeitsverzeichnis
  • Verzeichnisse vom Verzeichnisstapel.

Home-Verzeichnisse

Die Tilde-Erweiterung bietet eine Möglichkeit, das Home-Verzeichnis des aktuellen Benutzers oder das Home-Verzeichnis des angegebenen Benutzernamens zu erweitern.

Syntax

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

~USER Expand to the home directory of the given username

Beispiel 1. Aktuelle Benutzer-Startseite

Tilde(~) als separates Wort wird zu $HOME erweitert, wenn es definiert ist, wenn $HOME nicht definiert ist, wird es mit dem Home-Verzeichnis des aktuellen Benutzers erweitert.

Jetzt ist der Wert der HOME-Variable /home/oracle, also änderte cd ~ das aktuelle Verzeichnis auf den Wert von $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 wird in /sbin geändert, und cd ~ verwendet nur $HOME, nicht das Home-Verzeichnis des Benutzers. Nachdem der Wert von $HOME zurückgesetzt wurde, änderte cd ~ das Verzeichnis auf den Wert des Home-Verzeichnisses, das für den Oracle-Benutzer in /etc/passwd festgelegt wurde. Für die Tilde-Erweiterung überschreibt HOME das echte Home-Verzeichnis.

[~]$ export HOME=/sbin

[oracle]$ cd ~

[~]$ pwd
/sbin

[~]$ unset HOME

[sbin]$ cd ~

[oracle]$ pwd
/home/oracle

Beispiel 2. Heimatverzeichnis des angegebenen Benutzers

Das folgende Skript übernimmt die Sicherung einer Protokolldatei, die das aktuelle Datum im Namen hat. Es protokolliert auch die Start- und Endzeit in der Datei namens backup.log im Home-Verzeichnis des Oracle-Benutzers.

#! /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

Wenn der angegebene Benutzername nicht existiert, wird er nicht erweitert. Im folgenden Beispiel gibt es keinen Benutzer namens ora. Daher wird ~ora nicht nach /home/ora erweitert.

$ echo ~ora
~ora

Lesen Sie unseren früheren Artikel, um zu verstehen, wie man Klammererweiterungen in bash durchführt. d.h. wie man { } in Bash verwendet.

Arbeitsverzeichnisse

Tilde mit + und – werden zur Darstellung der Arbeitsverzeichnisse verwendet.

  • ~+ wird auf den Wert der PWD-Variablen erweitert, die das aktuelle Arbeitsverzeichnis enthält.
  • ~- wird auf den Wert der OLDPWD-Variablen erweitert, die das vorherige Arbeitsverzeichnis enthält. Wenn OLDPWD nicht gesetzt ist, wird ~- nicht erweitert.

Beispiel 3. Erweiterung alter/aktueller Arbeitsverzeichnisse

Das folgende Beispiel vergleicht die Datei im aktuellen Verzeichnis und im vorherigen Arbeitsverzeichnis.

$ 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
$

In obiger Ausführung:

  • ~+/gg.c erweitert sich zu /var/opt1/gg/gg.c
  • ~-/gg.c erweitert sich zu /var/opt/gg/gg.c

Dieser Artikel ist Teil der fortlaufenden Bash-Tutorial-Reihe.

Erweiterung für Verzeichnisse im Stack

Jeder Bash-Prozess enthält ein Stack-Objekt, das verwendet werden kann, um Verzeichnisse zu verfolgen, die ein Skript besucht hat, während es Daten von Verzeichnisinhalten verarbeitet.

Es ist ein sehr einfacher Mechanismus, Verzeichnisse zu referenzieren oder zu zuvor besuchten Verzeichnissen zurückzuwechseln. Die Tilde-Erweiterung bietet auch eine Erweiterung der Verzeichnisse im Verzeichnisstapel.

  • ~+N Erweitert das N-te Verzeichnis im Verzeichnisstapel (gezählt von links in der Liste, die von dirs ausgegeben wird, wenn es ohne Optionen aufgerufen wird), beginnend mit Null.
  • ~-N Erweitert das N-te Verzeichnis im Verzeichnisstapel (gezählt von rechts von der Liste, die von dirs ausgegeben wird, wenn es ohne Optionen aufgerufen wird), beginnend mit Null.

Sehen Sie sich unseren früheren Artikel an, um zu verstehen, wie die Befehle dirs, pushd und popd verwendet werden, um den Verzeichnisstapel zu manipulieren.

Beispiel 4. Zeigt das N-te Verzeichnis von links mit ~+

an

Im folgenden Beispiel hat der Verzeichnisstapel 4 Verzeichnisse. ~+2 gibt Ihnen den verfügbaren Verzeichnispfad an der zweiten Position von links, beginnend mit Null.

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

$ cd ~+2

$ pwd
/var/opt/GG/bin

Aber oben auf dem Stapel (Nullposition) wird immer das aktuelle Verzeichnis haben. Nach der obigen Ausführung wird also Folgendes im Verzeichnisstapel angezeigt.

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

Beispiel 5. Zeigt das N-te Verzeichnis von rechts mit ~-

an

Das Folgende ähnelt dem obigen Beispiel. Aber wegen der ~-.

werden die Verzeichnisse vom Ende des Stacks berücksichtigt
$ 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. Verwendung von –exclude mit dem Du-Befehl?

  2. Ist es möglich, die Tilde ('~', Home-Verzeichnis) neu zu definieren?

  3. Bash-Arrays mit Beispielen

  4. Bash-If-Else-Anweisung mit Beispielen

  5. Das ultimative Bash-Array-Tutorial mit 15 Beispielen

Das fc Command Tutorial mit Beispielen für Anfänger

Bash Echo-Befehl mit Beispielen in Linux erklärt

Bash-Umleitung mit Beispielen erklärt

Bash Scripting – Funktionen mit Beispielen erklärt

Bash-Scripting – Variablen mit Beispielen erklärt

Bash If Else Syntax mit Beispielen