Linux'ta İç İçe Değişken Değiştirme ve Önceden Tanımlanmış BASH Değişkenleri - Bölüm 11
Değişkenleri detaylı bir şekilde ele aldığımız BASH Shell ile ilgili son iki makalemiz okuyucularımız tarafından oldukça beğenildi. Biz Tecmint Ekibi olarak size en son, güncel ve ilgili konuları ayrıntılı olarak sunmak konusunda çok istekliyiz. Üstelik her zaman ilgili konuların ana perspektiflerine dokunmaya çalışıyoruz.
Bu konuyu kapatmadan önce değişkenlerin değiştirilmesini ve Shell'de tanımlanan değişkenleri göreceğimiz Linux Değişkenleri ile ilgili son makale.
Bash, komut gerçekten yürütülmeden önce değişken değişimini gerçekleştirir. Linux Bash Shell, komutu çalıştırmadan önce tüm '$' işaretini arar ve onu değişkenin değeriyle değiştirir. Bash Değişkeni değiştirme işlemi yalnızca bir kez gerçekleştirilir. Peki ya iç içe geçmiş değişkenlerimiz varsa?
Not: Yuvalanmış değişken derken, değişkenin içinde bildirilen değişkeni kastediyoruz. Yukarıdaki senaryoyu aşağıdaki örnekte görelim.
Aşağıdaki gibi Salt Okunur ve Çalıştırılabilir bir değişken bildirin.
avi@localhost:~$ declare -rx Linux_best_website="linux-console.net"
Saklanan değişkenin değerini kontrol edin.
avi@localhost:~$ printf "%s" "$Linux_best_website"
linux-console.net
Şimdi yine Salt Okunur ve Çalıştırılabilir olan başka bir değişken bildirin.
avi@localhost:~$ declare -rx Linux_website="Linux_best_website"
Şimdi durum şu ki, iki değişken tanımladık.
Değeri “linux-console.net” olan ‘Linux_best_website’
ve değeri “Linux_best_website” olan 'Linux_website'
Aşağıdaki tek satırlık komutu çalıştırırsak sonuç ne olur?
avi@localhost:~$ printf "%s" "$Linux_website"
Öncelikle '$Linux_website' değişkenini “Linux_best_website” değeriyle değiştirmelidir ve ardından “$Linux_best_website” yine değeri olan bir değişkendir. yani “linux-console.net”. Yani aşağıdaki komutu çalıştırmanın son çıktısı olmalıdır.
avi@localhost:~$ printf "%s" "$Linux_website"
linux-console.net
Ancak maalesef durum bu değil, aldığımız çıktı Linux_best_website oluyor.
Sebep? Evet! Bash, değişkenin değerini yalnızca bir kez değiştirir. Değişkenleri sık sık değiştirmemiz gereken ve değişkeni birden fazla kez değiştirmemiz gereken karmaşık komut dosyaları ve programlara ne dersiniz?
Burada, bir komut dosyasında birden fazla kez ek değişken değiştirme işi gerçekleştiren 'eval' komutu geliyor. İşte tüm işleyişi cam gibi netleştirecek bir örnek.
Değeri 10 olan bir x değişkeni bildirin.
avi@localhost:~/Desktop$ declare x=10
Az önce tanımladığımız x değişkeninin değerini kontrol edin.
avi@localhost:~/Desktop$ echo $yx
x10
Değeri x olan bir y değişkeni bildirin.
avi@localhost:~/Desktop$ declare y=x
Az önce tanımladığımız y değişkeninin değerini kontrol edin.
avi@localhost:~/Desktop$ echo $y
x
Burada, fazladan bir değişken değişimi gerçekleştirmeyen BASH tek seferlik değişken değişimi sorunu var. Bunu düzeltmek için 'eval' komutunu kullanıyoruz.
avi@localhost:~/Desktop$ eval y=$x
Şimdi 'y' değişkeninin Değerini kontrol edin.
avi@localhost:~/Desktop$ echo $y
10
Yaşasın! Sorun düzeltildi ve yarışı 'eval' komutu kazandı :)
'eval' komutunun büyük komut dosyası programlarında çok yararlı ve çok kullanışlı bir araç olduğundan bahsetmiyorum bile.
Bu yazının sonuncusu ama en önemlisi BASH'in önceden tanımlı değişkenleridir. HAYIR! Bu listeyi görünce paniğe kapılmayın. Senaryo yazmaya başlamadan önce birkaç tanesi dışında listenin tamamını hatırlamanıza gerek kalmaz. Öğrenme sürecinin bir parçası olarak BASH'in önceden tanımlanmış değişken Listesini sunuyoruz.
No. | BASH VARIABLE | RESULT |
1 | auto_resume | Process command completion for the stopped jobs. |
2 | BASH | PATH of the shell. |
3 | BASH_ENV | Shows the name of the profile file |
4 | BASH_VERSION | Shows the version of Bash |
5 | BASH_VERSINFO | Shows Detailed version information. |
6 | BASH_VERSINFO[0] | The major version number (the release). |
7 | BASH_VERSINFO[1] | The minor version number (the version). |
8 | BASH_VERSINFO[2] | The patch level. |
9 | BASH_VERSINFO[3] | The build version. |
10 | BASH_VERSINFO[4] | The release status (for example, beta1 ). |
11 | BASH_VERSINFO[5] | The value of MACHTYPE . |
12 | CDPATH | List of directories separated by colon. |
13 | COLUMNS | Number of Characters per line on Standard Output. |
14 | EUID | User ID of the current user. |
15 | FCEDIT | The default text editor for the fc command. |
16 | FUNCNAME | The name of the fun |
17 | GROUPS | Groups of which the user is a Member. |
18 | HISTFILE | The file containing the command history. |
19 | HOME | The name of your home directory. |
20 | LINES | Number of horizontal lines on Standard Output. |
21 | Name of a file to check for incoming mail | |
22 | OSTYPE | Name of the operating system. |
23 | OLDPWD | The previous working directory |
24 | PWD | The current working directory |
25 | RANDOM | Prints a random number |
26 | SHELL | The preferred shell to use |
27 | TIMEFORMAT | The format for the time command. |
28 | UID | The ID of the current user |
Önceden Tanımlanmış BASH Değişkeninin çok büyük bir listesi var. En sık kullanılanların bir listesini oluşturmaya çalıştık.
Şimdilik bu kadar. Yine ilginç bir yazıyla karşınızda olacağım. O zamana kadar bizi izlemeye devam edin ve TecMint'e bağlı kalın. Aşağıdaki yorum bölümünde bize değerli geri bildirimlerinizi iletmeyi unutmayın.