İşlevlerde, takma adlarda ve çalıştırılabilir işlemlerde tire ile ilgili sorunlar var mı?


25

Testlerimde (Bash ve Z Shell'de), adında kısa çizgi bulunan işlevler veya takma adlar veya çalıştırılabilir kabuk komut dosyaları tanımlarken hiçbir sorun görmedim, ancak bunun tüm kabuklarda ve tüm kullanım durumlarında iyi olacağından emin değilim. .

Bunu yapmak istememin nedeni, kısa çizginin alt çizgi çizmekten daha kolay ve bu nedenle daha hızlı ve daha düzgün olmasıdır.

Bir sorun olmadığına inanmakta tereddüt etmemizin bir nedeni, bazı dillerde (örneğin Ruby'de) kısa çizgilerin etrafında boşluklar olmasa bile eksi işareti olarak yorumlanmasıdır. Tire'nin boşluksuz bile bir seçeneği işaret ettiği şeklinde yorumlanan bazı kabuklarda böyle bir şey olursa beni şaşırtmazdı.

Biraz şüphelendiğim bir diğer neden de, metin editörümün, tire işaretli işlevlerin sözdizimini vurgulamasından kaynaklanıyor olmasıdır. (Ama elbette bu, kabuk komut dosyaları için yapılandırmayı vurgulayan sözdiziminde sadece bir hata olması muhtemeldir.)

Tire kullanmaktan herhangi bir sebep var mı?

Yanıtlar:


32

POSIX ve Tire: Garanti Yok

POSIX standardına göre, bir işlev ismi geçerli bir isim olmalı ve bir isim şunlardan oluşabilir:

3.231 Ad
Kabuk komut dilinde, taşınabilir karakter kümesinden yalnızca alt çizgi, rakam ve alfabetikten oluşan bir kelime. Bir ismin ilk karakteri bir rakam değildir.

Ayrıca, diğer ad , aşağıdakilerden oluşan geçerli bir diğer ad olmalıdır :

3.10 Diğer Ad Adı
Kabuk komut dilinde, taşınabilir karakter kümesinden yalnızca alt çizgi, rakam ve alfabe içeren ve aşağıdaki karakterlerden herhangi birinden oluşan bir kelime: '!', '%', ',', '@'.

Uygulamalar, takma ad adlarındaki diğer karakterlerin bir uzantı olmasına izin verebilir. (Vurgu benim.)

Bir tire olan değil her iki durumda da izin verilmelidir karakterler arasında yer. Dolayısıyla, eğer kullanılırlarsa, taşınabilirlik garanti edilmez.

Tire'yi Desteklemeyen Kabuk Örnekleri

dash/bin/shdebian-ubuntu familyasındaki varsayılan kabuktur ( ) ve fonksiyon isimlerindeki kısa çizgiler desteklememektedir:

$ a-b() { date; }
dash: 1: Syntax error: Bad function name

İlginçtir ki, bu does yukarıda belirtildiği gibi, bu bir olsa, takma ad destek tire uygulama karakteristiği , bir gereklilik:

$ a_b() { printf "hello %s\n" "$1"; }
$ alias a-b='a_b'
$ a-b world
hello world

Meşgul kutusu kabuğu (Almquist kabuğu), işlev adlarında kısa çizgiler de desteklemez:

$ a-b() { date; }
-sh: Syntax error: Bad function name

Shell'den Hyphen Destek Özeti

Aşağıdaki kabukların, işlev adlarında kısa çizgileri desteklediği bilinmektedir:

  • ksh, bash, zsh

Aşağıdaki kabukları bilinmektedir değil fonksiyon isimlerinde destek tire için:

  • kül (meşgul kutusu), csh, tcsh, çizgi

Sonuçlar

  • Tireler standart değildir. Kabuklar arası uyumluluk istiyorsanız, onlardan uzak durun.
  • Tire yerine alt çizgi kullanın: alt çizgiler her yere kabul edilir.

2
İle İsimler -onları kötülük vardır. Sana bakıyorum CSS. :)
PM 2Ring

Teşekkürler. Ben daha sonra test cshve tcshve onlar da tire desteklemez, ama Korn kabuk yaptı. a-b()Benim fonksiyon ismimi de kullanmam biraz komik .
iconoclast

@iconoclast Cevabınıza kabuk testleri sonuçlarını ekledim. Teşekkürler.
John1024

@ PM2Ring yazmak için alt çizgi olan adlardan daha kolaydır. Kendilerine izin vermeyen sistemlerin gelenek veya uygulama kararları dışında , onların kötülük iddiasını desteklemek için hangi prensibi işaret edebilirsiniz?
iconoclast

1
@iconoclast Tireli isimler birçok dilde imkansızdır, çünkü kısa çizgi eksi işareti olarak yorumlanır, bu nedenle eğer böyle bir dilin tireleri içeren isimleri destekleyen bir dil ile birlikte çalışması gerekiyorsa, tirelenmiş adları olan varlıkların zorlandığı dağınık durumdan haberdar olursunuz diğer dilde farklı bir isim var.
PM 2Ring

3

Bunun gerçekten geç olduğunu biliyorum, ama belki de alt çizgiyi daha erişilebilir hale getirme konusunda çalışabilirsiniz.

xmodmap -e "keycode  20 =  underscore minus"

Bu alt çizgi kısa çizgi (eksi) ile değiştirir.

Şimdi, kısa çizgi için üst karakter tuşunu tutuyorsunuz, ancak alt çizgi üst karakter olmadan yazılıyor.

Anahtar kodunuz farklı olabilir, ancak klavyenize bağlı olduğunu düşünüyorum; mayın 20 olur. Sadece hangi anahtar kodu kullanmanız gerektiğini bulmak için yardıma ihtiyacınız olursa haberim olsun.

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.