Ters eğik çizgi komutu komut olarak ne anlama gelir?


17

Yüklediğim bir yazılım, profilime şu satırı ekledi:

[ -s "$SOME_FILE" ] && \. "$SOME_FILE"

Ben nokta .ile eşanlamlı biliyorum source, bu yüzden bu sadece dosya kaynak olduğundan şüpheleniyorum, ama daha \.önce hiç görmedim ; başka bir şey yapıyor mu?

DV'lerle ilgili düzenleme: "ters eğik çizgi" ./araması yürütülebilir dosyaları çağırmayla ilgili sorulara ve görünmeyen man sourcebir sayfaya yönlendirir \.. Başka ne denemek bilmiyorum, dolayısıyla soru.

Düzenleme 2: ilgili sorulara bakın

Yanıtlar:


31

Tırnak işaretleri dışındaki ters eğik çizgi, “ayrıştırma sırasında bir sonraki karakteri tam anlamıyla yorumlama” anlamına gelir. Yana .çözümleyici için sıradan bir karakter, \.aynı şekilde ayrıştırılır .ve yerleşiği çağırır .(ki sourcebash ile eş anlamlıdır).

Bu bağlamda fark yaratabileceği bir durum vardır. Bir kullanıcı adı verilen bir takma ad tanımlamış ise .daha önce de .profileve .profileadlar genişleyen bir kabuk içinde okunduğunu (ki vurmayı o etkileşimli çağrılan ne zaman varsayılan olarak yalnızca yapar) daha sonra, .takma ad tetikleyebilir ancak \.yine yerleşiğini tetikler, kabuk çünkü hiçbir şekilde alıntılanan kelimeler üzerinde takma ad genişletmeyi denemez.

Bir kullanıcı için takma ad yaptıktan sonra şikayet ettiğinden bunun .değiştirildiğinden şüpheleniyorum .\..

Not: \.adlı bir işlevi çağırır .. Muhtemelen fonksiyonları yazan kullanıcılar, takma ad yazan kullanıcılardan daha bilgilidir ve .profileüçüncü taraflardan kod ekleyecekseniz standart bir komutu yeniden tanımlamanın kötü bir fikir olduğunu bilirler . Ancak, hem diğer adları hem de işlevleri atlamak istiyorsanız, yazabilirsiniz command .. Bu pasajın yazarı bunu yapılı olmayan antik kabukları önemsediği için commandya da farkında olmadıkları için daha büyük olasılıkla yapmadı.

Bu arada, herhangi bir takma ad tanımlamak .profilekötü bir fikirdir çünkü bir kabuk başlatma komut dosyası değil .profile, bir oturum başlatma komut dosyasıdır. Bash için takma adlar aittir ..bashrc


9

\.Bir "değişmez nokta", yani sadece bir noktadır. Standart olarak alınacaktır .komuta (benzer sourceiçinde bash).

POSIX standardı bunu söylemek için var (benim vurgu)

<backslash>Alıntılanmayan A , a dışında , aşağıdaki karakterin gerçek değerini koruyacaktır<newline> . Eğer <newline>aşağıdakini takip ederse <backslash>, kabuk bunu çizgi devamı olarak yorumlamalıdır. Ve bölme önce jeton girdi çıkarılır . Kaçan kısım tamamen girişten kaldırıldığından ve herhangi bir beyaz boşlukla değiştirilmediğinden, bir token ayırıcısı olarak işlev göremez.<backslash><newline><newline>

Nokta karakteri takma ad olabilir :

$ alias .='echo hello'
$ .
hello

Bu \., .komutun diğer adının kullanılmasını önlemek anlamına gelir , çünkü ,

Bir belirteç sınırlandırıldıktan sonra, ancak Gramer kurallarına dilbilgisel kurallar uygulanmadan önce, basit bir komutun komut adı sözcüğü olarak tanımlanan sonuçtaki bir sözcük, sıralanmamış , geçerli bir diğer ad olup olmadığını belirlemek için incelenir .


Bir kelimedeki ters eğik çizginin alıntı olarak nasıl yorumlandığı ve bunun takma adın genişlemesini nasıl önlediği hakkında resmi bir kaynak arıyordum. Referans için teşekkürler!
Sheljohn

1
@Sheljohn Güncellenmiş cevaba bakın.
Kusalananda
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.