GNU/Linux >> Belajar Linux >  >> Linux

The Magic ~:Ekspansi Bash Tilde dengan 5 Contoh

Bash shell menyediakan beberapa variabel yang diawali dengan '~' (bernama tilde) yang disebut Tilde Expansions.

Mereka adalah sinonim untuk konten variabel lain di dalam shell Anda.

Perluasan Tilde adalah proses mengubah singkatan ini menjadi nama direktori yang mereka perjuangkan. Dalam artikel ini, mari kita tinjau fitur perluasan tilde dengan contohnya.

Perluasan tilde berlaku untuk karakter plus '~' termasuk +, – dan N (yang merupakan bilangan bulat) hingga spasi putih atau garis miring .

Perluasan tilde digunakan untuk memperluas ke beberapa nama jalur tertentu:

  • Direktori beranda
  • Direktori kerja saat ini/sebelumnya
  • Direktori dari tumpukan direktori.

Direktori Beranda

Perluasan Tilde menyediakan cara untuk memperluas direktori home dari pengguna saat ini atau direktori home dari nama pengguna yang diberikan.

Syntax

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

~USER Expand to the home directory of the given username

Contoh 1. Beranda Pengguna Saat Ini

Tilde(~) sebagai kata terpisah, diperluas ke $HOME jika didefinisikan, jika $HOME tidak didefinisikan, maka diperluas dengan direktori home pengguna saat ini.

Sekarang nilai variabel HOME adalah /home/Oracle jadi cd ~ mengubah direktori saat ini menjadi nilai $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 diubah menjadi /sbin, dan cd ~ hanya menggunakan $HOME bukan direktori home pengguna. Setelah menghapus nilai $HOME, cd ~ mengubah direktori ke nilai direktori home yang ditetapkan untuk pengguna oracle di /etc/passwd. Untuk perluasan Tilde, HOME menggantikan direktori home yang sebenarnya.

[~]$ export HOME=/sbin

[oracle]$ cd ~

[~]$ pwd
/sbin

[~]$ unset HOME

[sbin]$ cd ~

[oracle]$ pwd
/home/oracle

Contoh 2. Direktori beranda dari pengguna yang diberikan

Skrip berikut mengambil cadangan file log yang memiliki tanggal saat ini dalam nama. Itu juga mencatat waktu mulai dan waktu berakhir ke dalam file bernama backup.log di direktori home pengguna 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

Jika nama pengguna yang diberikan tidak ada maka itu tidak berkembang menjadi sesuatu. Dalam contoh berikut, tidak ada pengguna yang disebut ora. Jadi, ~ora tidak akan diperluas ke /home/ora.

$ echo ~ora
~ora

Lihat artikel kami sebelumnya untuk memahami cara melakukan ekspansi brace di bash. yaitu cara menggunakan {} di bash.

Direktori Kerja

Tilde dengan + dan – digunakan untuk mewakili direktori kerja.

  • ~+ memperluas ke nilai variabel PWD yang menyimpan direktori kerja saat ini.
  • ~- memperluas nilai variabel OLDPWD, yang menyimpan direktori kerja sebelumnya. Jika OLDPWD tidak disetel, ~- tidak diperluas.

Contoh 3. Perluasan direktori kerja lama/saat ini

Contoh berikut akan membandingkan file di direktori saat ini dan direktori kerja sebelumnya.

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

Dalam eksekusi di atas:

  • ~+/gg.c diperluas ke /var/opt1/gg/gg.c
  • ~-/gg.c diperluas ke /var/opt/gg/gg.c

Artikel ini adalah bagian dari seri Tutorial Bash yang sedang berlangsung.

Ekspansi untuk Direktori di Stack

Setiap proses bash berisi objek tumpukan yang dapat digunakan untuk melacak direktori yang dikunjungi skrip saat sedang memproses data konten direktori.

Ini adalah mekanisme yang sangat sederhana untuk dapat mereferensikan direktori atau mengubah kembali ke direktori yang pernah dikunjungi sebelumnya. Perluasan Tilde juga menyediakan perluasan ke direktori di tumpukan direktori.

  • ~+N Memperluas direktori ke-N di tumpukan direktori (dihitung dari kiri daftar yang dicetak oleh dir saat dipanggil tanpa opsi), dimulai dengan nol.
  • ~-N Memperluas direktori ke-N di tumpukan direktori (dihitung dari kanan daftar yang dicetak oleh dir saat dipanggil tanpa opsi), dimulai dengan nol.

Tinjau artikel kami sebelumnya untuk memahami cara menggunakan perintah dirs, pushd, dan popd untuk memanipulasi tumpukan direktori.

Contoh 4. Menampilkan direktori ke-N dari kiri menggunakan ~+

Dalam contoh berikut, tumpukan direktori memiliki 4 direktori. ~+2 memberi Anda jalur direktori yang tersedia di posisi kedua dari kiri dimulai dengan nol.

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

$ cd ~+2

$ pwd
/var/opt/GG/bin

Tetapi top of the stack (posisi nol) akan selalu memiliki direktori saat ini. Jadi setelah eksekusi di atas, berikut ini ditampilkan di tumpukan direktori.

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

Contoh 5. Menampilkan direktori ke-N dari kanan menggunakan ~-

Berikut ini mirip dengan contoh di atas. Tapi, akan mempertimbangkan direktori dari bagian bawah tumpukan karena ~-.

$ 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. Menggunakan –exclude Dengan Perintah Du?

  2. Apakah `~#` Sebuah Ekspansi Tilde Dari Bash?

  3. Bash Array Dengan Contoh

  1. Pernyataan Bash If-Else Dengan Contoh

  2. Tutorial Bash Array Terbaik dengan 15 Contoh

  3. Bagaimana cara mengubah direktori di Git Bash dengan Git untuk Windows?

  1. Apakah Mungkin Untuk Mendefinisikan Ulang Tilde ('~', Direktori Rumah)?

  2. '&&' vs. '&' dengan perintah 'test' di Bash

  3. Apa gunanya mengenkripsi direktori home?