Linux'ta Bash printf Komutu Nasıl Kullanılır

Yayınlanan: 2022-06-25
Mavi arka planda bir Linux terminali.
fatmawati achmad zaenuri/Shutterstock.com

Bash printf komutu, echo komutunun sağladığından daha hassas denetim ve daha fazla biçimlendirme seçeneğiyle bir Linux terminal penceresine yazmanıza olanak tanır. printf 'nin tuhaf tuhaflıkları bile faydalı olabilir.

Bir Terminale Yazma

Bir programla etkileşimin en temel bölümlerinden biridir. Program ekrana bir şey yazıyor ve siz onu okuyorsunuz. Unix'ten türetilen ve Linux tarafından desteklenen komut satırı programlarının mümkün olduğu kadar kısa olduğu göz önüne alındığında bile - çoğu yalnızca bir şeyler ters giderse terminale yazar. Kullanıcıya ne olduğunu veya olmak üzere olduğunu veya şimdi olduğunu söylemek, temel bir programlama ilkesidir.

Linux'ta Echo Komutu Nasıl Kullanılır
İLGİLİ Linux'ta Echo Komutu Nasıl Kullanılır

Bash kabuğu, terminal penceresine metin yazabilen echo komutuna sahiptir. Dizeye dahil edilmişlerse değişkenleri işleyebilir ve değerlerini görüntüleyebilir ve onu komut dosyalarında veya komut satırında kullanabilirsiniz. Peki printf neden var? echo , metin yazma işini kapsamıyor mu? printf , terminal pencerelerine dize yazmanın basit vanilya eyleminin ötesinde işlevsellik sunar. Çıktıyı büyük bir esneklikle biçimlendirmenize olanak tanır ve başka püf noktaları da vardır.

Bash printf komutu, C dilinden printf işlevine göre modellenmiştir, ancak farklılıklar vardır. C biliyorsanız, bu farklılıklara dikkat etmeniz gerekir.

Temel Dizeleri Yazma

Terminale dize yazarken echo ve printf nasıl farklılaştığını görelim.

 yankı burada bazı kelimeler
 printf işte bazı kelimeler 

Alıntı yapılmayan kelimelerle yankı ve printf kullanma

echo komutu tüm sözcükleri yazdırır, ancak printf yalnızca ilk sözcüğü yazdırır. Ayrıca printf tarafından basılan yeni bir satır yok. Çıktı, komut istemine karşı karşıyadır. Ancak, her şeyden önce, printf tüm kelimeler üzerinde etkili olması için alıntı yapılması gerekir.

 yankı burada bazı kelimeler
 printf "İşte bazı kelimeler" 

alıntı kelimelerle yankı ve printf kullanma

Bu daha iyi. Tüm kelimeleri yazdırdık ama hala yeni bir satır alamıyoruz. Bunun nedeni, printf ile yalnızca bir satır isterseniz yeni bir satır almanızdır. Bu bir acı gibi görünebilir, ancak bir tanesini dahil edip etmemeye karar vermenizi sağlar. printf yeni bir satır yayınlamasını sağlamak için, dizginize “ \n ” eklemeniz gerekir. Bu, "yeni satır" kaçış dizisidir.

 yankı burada bazı kelimeler
 printf "işte bazı kelimeler\n" 

Echo ve printf'i alıntılanan kelimelerle ve yeni satır karakteriyle kullanma

Bazen yeni bir satır kullanırsınız ve bazen kullanmazsınız. İşte bir printf ifadesinin yeni bir satır kullandığı ve diğerinin kullanmadığı bir durum.

 printf "Nasıl Yapılır" && printf "Geek\n" 

Tek bir metin satırı oluşturmak için iki printf kullanma

İlk printf yeni bir satır yazdırmadığından, ikinci printf çıktısı “Nasıl Yapılır”dan hemen sonra ve aynı satırda konumlandırılır. İkinci printf , yeni bir satır yazdırmak için \n kullanır. Bu, komut isteminin yazdırılan metnin altındaki satırda görünmesini sağlar.

İLGİLİ: Linux Bash Komut Dosyasında Bir Dosyayı Satır Satır Nasıl İşlenir

Diğer Kaçış Karakterleri

Burada kullanabileceğiniz birkaç kaçış karakteri daha var. “ \n ” öğesini zaten çalışırken gördünüz.

  • \n : Yeni bir satıra iner.
  • \r : Bir satır başı yazdırır. Bu, çıktı imlecini geçerli satırın başına geri gönderir.
  • \t : Bir sekme karakteri yazdırır.
  • \v : dikey sekme alanı yazdırır.
  • \\ : Bir ters eğik çizgi karakteri yazdırır.
  • \” : Bir tırnak karakteri yazdırır.
  • \b : Bir geri silme karakteri yazdırır.

Satır başı kaçış karakteri, imleci geçerli satırın başına geri taşır.

 printf "Bal tüm kötülüklerin anasıdır\rPara\n" 

Satırın başına dönmek için satır başı karakterini kullanma

printf komutu girdisini soldan sağa doğru işler. Dize, printf\r ” çıkış karakteriyle karşılaşana kadar normal metin olarak yazdırılır. Çıkış imleci geçerli satırın başına geri taşınır.

Dizenin işlenmesi, “ \r ” karakterinin hemen arkasındaki harfle devam eder. Kalanı işlemek, printf "Bal" kelimesinin üzerine yazarak "Para" yazdırmasına neden olur.

" tırnak işareti dizeleri alıntılamak için kullanılır ve ters eğik çizgi “ \ ” karakteri kaçış dizilerini belirtir. Bu karakterleri yazdırmak istiyorsanız, onlardan ters eğik çizgi ile çıkmanız gerekir. Bu, printf onları değişmez karakterler olarak ele almasını söyler.

 printf "Bu bir \tSekmedir, bu bir tırnak işaretidir \" ve bu \\ bir Ters Eğik Çizgidir\n" 

Kaçan karakterler, kelimenin tam anlamıyla ele alınmaları için

Değişkenleri Kullanma

Değişkenleri printf ile kullanmak, onları echo ile kullanmaya çok benzer. Bu ortam değişkeni gibi bir değişkeni dahil etmek için, her zamanki gibi onun önüne dolar işareti “ $ ” koyun.

 printf "Ana dizin: $HOME\n" 

Bir ortam değişkeni ile printf kullanma

İLGİLİ: Bash'de Değişkenlerle Nasıl Çalışılır

Dizeleri Biçimlendir

Biçim dizeleri, çıktının biçimini tanımlayan dizelerdir. Biçim dizesinin üzerinde çalışacağı bağımsız değişkenler olarak metin ve diğer değerleri sağlarsınız.

Biçim dizesi metin, kaçış dizileri ve biçim belirteçleri içerebilir. Format belirteçleri, printf dizeler, tamsayılar veya karakterler gibi ne tür bir argüman bekleneceğini söyler.

Bunlar en yaygın biçim belirteçleridir. Hepsinin önünde bir yüzde “ % ” işareti bulunur. Yüzde işareti yazdırmak için iki yüzde işaretini birlikte “ %% ” kullanırsınız.

  • %s : Bir dize yazdırır.
  • %c : Tek bir karakter yazdırır.
  • %d : Bir tamsayı yazdırır.
  • %f : kayan noktalı bir sayı yazdırır.
  • %u : İşaretsiz bir tamsayı yazdırır.
  • %o : Sekizlik bir değer yazdırır.
  • %x : Bir değeri küçük harfle onaltılık olarak yazdırır.
  • %X : Büyük harfle onaltılık bir değer yazdırır.
  • %e : Bilimsel gösterimde, küçük harfle bir kayan noktalı sayı yazdırır.
  • %E : Bilimsel gösterimde bir kayan noktalı sayıyı büyük harfle yazdırır.
  • %% : Yüzde “%” sembolü yazdırır.
 printf "Nasıl Yapılır %s\n" "Geek"
 printf "%s%s %s\n" "Nasıl" "-Kime" "Geek" 

"çok fazla" argümanı kabul eden printf gösteriliyor

İlk komuttaki biçim dizesi, kendi metnini içerir. “Geek” dizesini argüman olarak printf . “ %s ” biçim belirteci ile eşleştirilir ve yazdırılır. Biçim dizesi ile bağımsız değişken dizesi arasında yalnızca bir boşluk olduğuna dikkat edin. C'de, onları ayırmak için bir virgül gerekir, ancak printf Bash versiyonunda boşluk kullanmak yeterlidir.

İkinci biçim dizgisi yalnızca biçim belirteçlerini ve yeni satır kaçış dizisini içerir. Üç dize argümanı, sırayla “ %s ” biçim belirteçlerinin her biri tarafından tüketilir. Yine, C'de, her argüman arasına virgül koymanız gerekir, ancak Bash printf bunu unutmamıza izin verir.

Farklı türdeki argümanları yazdırmak için uygun format belirtecini kullanmanız yeterlidir. İşte printf kullanılarak oluşturulmuş hızlı bir sayı dönüştürme rutini. 15 değerini ondalık, sekizlik ve onaltılık gösterimde yazdıracağız.

 printf "Aralık: %d\nEkim: %o\nOnaltılı: %x\n" 15 15 15 

farklı temel notasyonlarda sayısal değerleri yazdırmak için printf kullanma

Örneği daha az karmaşık hale getirmek için bunu biraz kısaltalım.

 printf "Onaltılı: %x\n" 15 

Onaltılık bir değer yazdırma

Çoğumuz onaltılık değerleri büyük harfle ve 0x10'dan küçük değerlerin başında sıfır ile basılmış olarak görmeye alışkınız. Bunu büyük harfli onaltılık biçim belirteci “ %X ” kullanarak ve yüzde işareti “ % ” ile “ X ” karakteri arasına bir genişlik belirteci koyarak başarabiliriz.

Bu, printf argümanın yazdırılması gereken alanın genişliğini söyler. Alan boşluklarla doldurulur. Bu formatla, iki basamaklı değerler herhangi bir dolgu olmadan yazdırılacaktır.

 printf "Onaltılı: %2X\n" 15 

2 karakter genişliğinde bir alanda büyük harfle onaltılık bir değer yazdırma

Şimdi, baştaki boşlukla basılmış bir büyük harf değeri elde ediyoruz. İkisinin önüne sıfır koyarak alanı boşluk yerine sıfırlarla printf pad yapabiliriz:

 printf "Onaltılı: %02X\n" 15 

sıfırlarla doldurulmuş 2 karakter genişliğinde bir alanda büyük harfle onaltılık bir değer yazdırma

Kesinlik belirteci, çıktıya dahil edilecek ondalık nokta sayısını ayarlamanıza olanak tanır.

 printf "Kayan nokta: %08.3f\n" 9.243546 

Kayan noktalı bir sayı ile genişlik ve kesinlik değiştiricileri kullanma

Bu, düzgün bir şekilde hizalanmış çıktılarla sonuç tabloları oluşturmayı kolaylaştırır. Bu sonraki komut, Bash printf bir başka tuhaflığını da gösterir. Biçim belirteçlerinden daha fazla argüman varsa, argümanlar tüm argümanlar tükenene kadar gruplar halinde format dizgisine beslenir. Bir seferde işlenen toplu işin boyutu, biçim dizesindeki biçim belirteçlerinin sayısıdır. C'de, printf işlev çağrılarındaki fazladan argümanlar yok sayılır.

 printf "Kayan: %8.3f\n" 9.243546 23.665 8.0021 

Düzgün bir tablo oluşturmak için genişlik ve hassas değiştiricileri kullanma

Genişlik ve kesinlik belirteçlerini dizelerle de kullanabilirsiniz. Bu komut, dizeleri 10 karakter genişliğinde bir alana yazdırır.

 printf "%10s %d\n" "mont" 7 "ayakkabılar" 22 "Şemsiyeler" 3 

Genişlik değiştiriciyi dizelerle kullanma

Varsayılan olarak, değerler alanlarında sağa dayalıdır. Onları sola yaslamak için, yüzde “ % ” işaretinin hemen arkasında bir eksi işareti “ - ” kullanın.

 printf "%-10s %d" "mont" 7 "ayakkabı" 22 "Şemsiye" 3 

Dizelerle sola dayalı bir genişlik belirteci kullanma

Kesinlik belirteci, yazdırılacak maksimum karakter sayısını ayarlamak için kullanılabilir. Genişlik alanının sınırlarını göstermek için iki nokta üst üste karakterleri “ : ” kullanıyoruz. “Şemsiye” kelimesinin nasıl kesildiği değil.

 printf ":%10.6s:\n" "mont" "ayakkabılar" "Şemsiyeler"
 printf ":%-10.6s:\n" "mont" "ayakkabılar" "Şemsiyeler" 

Bir dizeden yazdırılan karakter sayısını sınırlamak için hassas değiştiriciyi kullanma

Genişlik belirteci, bir argüman olarak bile iletilebilir. Sayısal belirteç yerine yıldız işareti “ * ” kullanın ve genişliği bir tamsayı argümanı olarak iletin.

 printf "%*s\n" 20 "En Sağ" 12 "Orta" 5 "en sol" 

Genişlik belirtecini printf'e argüman olarak iletmek

Diğer Hileler ve Tuhaflıklar

Biçim dizesinin içindeki biçim belirteçleri, ister komut satırında normal argümanlar olarak sağlanmış olsunlar, isterse bir ifadenin çıktısı olarak oluşturulmuş olsunlar, uygun türdeki değerlerle çalışacaktır.

Bu, iki sayının toplamını yazdırır:

 printf "23+32=%d\n" $((23+32)) 

İki sayının toplamını yazdırma

Bu komut, geçerli çalışma dizinindeki dizin sayısını yazdırır:

 printf "%d dizin var\n" $(ls -d */ | wc -l) 

printf ile dizinleri sayma

Bu printf komutu, bir çağrıdan başka bir komuta döndürülen bir dize yazdırır.

 printf "Mevcut kullanıcı: %s\n" $(whoami) 

Çıktıyı başka bir komuttan yazdırma

Bir dize biçimi belirteci “ %s ” bir bağımsız değişkenle birlikte sağlanmazsa, printf hiçbir şey yazdırmaz.

 printf "Bir: %s iki: %s\n" "Alfa" 

printf, eksik dize argümanlarıyla nasıl ilgilenir?

%s ” dizi biçimi belirteci yanlışlıkla sayısal bir değerle sağlanırsa, onu bir dizeymiş gibi yazdırır ve şikayet etmez. Bunu C printf ile denemeyin - çok kötü şeyler olacak. Programınız muhtemelen çökecektir. Ancak Bash printf bunu şikayet etmeden hallediyor.

 printf "Bir: %s iki: %s\n" "Alfa" 777 

printf tamsayıları dize değerleri olarak nasıl sessizce kabul eder?

Bir tamsayı biçimi belirteci “ %d ” argüman almazsa sıfır yazdırır.

 printf "Tamsayı: %d\n" 

printf eksik tamsayı bağımsız değişkenlerini nasıl işler?

Bir tamsayı biçimi belirteci “ %d ” yanlışlıkla bir dize argümanı alırsa, Bash bir hata mesajı yazdırır ve printf sıfır yazdırır.

 printf "Tamsayı: %d\n" "Yedi" 

printf, tamsayı argümanları yerine sağlanan dizeleri nasıl ele alır?

Unicode numaraları veya "kod noktaları" kullanılarak garip semboller oluşturulabilir. Bunlar, "u" harfi ve ardından Unicode değerleri kullanılarak kaçar.

 printf "Euro sembolü: \u20AC\n" 

Kaçan bir Unicode değeri yazdırma

Argüman dizgilerine kaçış dizileri eklemek için, biçim dizgisinde “ %s ” dizgi biçim belirticisini değil, “ %b ” biçim belirticisini kullanmalısınız.

 printf "%s" "\u20AC\n"
 printf "%b" "\u20AC\n" 

Dize bağımsız değişkenlerinde kaçış dizilerini işlemek için o %b biçim belirtecini kullanma

İlk printf deyimi Unicode değerini işlemez ve yeni satır kaçış dizisini tanımaz. İkinci printf ifadesi “ %b ” biçim belirtecini kullanır. Bu, Unicode karakterini doğru şekilde işler ve yeni bir satır yazdırılır.

İLGİLİ: ANSI ve Unicode gibi Karakter Kodlamaları Nelerdir ve Nasıl Farklılar?

Kurslar için Atlar

Bazen tek yapmanız gereken terminal penceresine bazı metinleri echo . Ancak biraz konumlandırma ve biçimlendirme uygulamanız gerektiğinde, printf bu iş için doğru araçtır.

 printf "%b" "Tha-" "tha-" "tha-" "hepsi bu kadar millet.\n"