terminal komutlarında “'” (kesme işareti) anlamı


11

Bazı tuhaf nedenlerle, tanımlayıcılarda kelime ayırıcı olarak "" "denedim:

$ export foo'bar=1
> 
> ^C
$ 

Sonuç yukarıda gösterildiği gibidir, id komut istemi ">" olarak değişir ve sistem açıkçası benim açımdan daha fazla bilgi bekler. Gördüğünüz gibi, kaçmak için ctrl-C tuşlarına basmak zorunda kaldım. Aynı şey,

$ ls foo'bar
$ mkdir foo'bar

Tüm bunların anlamını merak ediyorum, terminal komutlarında "" "özel anlamının ne olduğunu merak ediyorum.

Ekstra: Bir yana, hem Unix benzeri hem de Windows sistemlerinde (güvenli olanların ortak alt kümesini almak için) dosya ve klasör adlarında özel veya başka şekilde geçersiz karakterler kümesini bilmek istiyorum (özellikle, ya tüm ASCII olmayan?).

Teşekkürler, Denis


Linux dünyasında, \ 0 (null) ve / dışındaki tüm karakterlere izin verilir. Ancak bu, hepsinin tavsiye edilebileceği anlamına gelmez. Birçok kişi, kabuk için özel bir anlamı olan karakterlerden kaçınmayı en iyi şekilde düşünür. Windows hakkında bilgi edinmek istiyorsanız bir Windows referansına başvurun.
Scott Severance

Yanıtlar:


15

'Karakteri herhangi bir kabuk komutunda her kullanıldığında çok güçlü bir karakterdir. Temelde '(kesme işareti) her türlü dönüşümü veya değişikliği devre dışı bırakır. 'İşaretleriyle çevrelenen her şeyi tek bir varlık, yani tek bir parametre olarak kabul eder. Kesinlikle hiçbir ikame veya genişleme gerçekleşmeyecektir.

Misal:

 $ echo '$HOME'

çıktıda dizenin $HOMEkendisini üretir ve ana dizininizin yolunu yazdırmaz. Tek tırnak, herhangi bir genişleme, ikame ve basitliği önlediğinden, mevcut olan her şeyi basit bir parametre olarak ele alır.

Kesme işaretini olduğu gibi kullanmak istiyorsanız, kaçmak zorundasınız:

 $ mkdir foo\'bar

 $ cd foo\'bar

Eğer kaçmazsa, ilk örneğinizde olduğu gibi çiftinin kapanmasını bekleyecektir.

Böylece, düzeltildi, komutunuz:

 $ export foo\'bar=1

NOT: Milan Todorovic'in fark ettiği gibi, bu geçerli olmayacaktır, çünkü bu durumda kesme işaretini kullanamazsınız.


1
@ denis63 Görmeniz gereken şeyse lütfen cevabı kabul edin :)
Rinzwind

7

Karakter 'özel bir karakterdir. Komut satırı girişinin değiştirilmeyecek kısmını işaretlemek için kullanırsınız (örneğin joker karakterlerin yerini almaz). Örneğin:

$ ls 'bla*'
ls: cannot access bla*: No such file or directory

Bu, için olan her şeyin değil olduğu argümanı lsolduğu anlamına gelir .bla*bla

>Karakter almanızın nedeni ', açılış 'için birini ve kapanmayacak kısmı değiştirmek için kullanmanız gerektiğidir.

Kullanmak isterseniz 'klasör adlarında bunu böyle kaçmak gerekir: \'. Bu yüzden adlı klasörü listelemek foo'baristiyorsanız şunu yazmalısınız ls foo\'bar.

Oh, ve 'ortam değişken isimlerinde kullanmanın mümkün olup olmadığından emin değilim . Bence kullanamazsın export foo\'bar=1,

Bu yardımcı olur umarım.


Ortam değişkeni adı kısıtlaması konusundaki gözleminiz için oy verin.
Frantique

Henüz oy veremiyorum (askubuntu için yeni), ama duygu var. Env var isimlerini kontrol ettiniz, aynen söylediğiniz gibi. (Sınırlayıcıları kendim açmayı / kapatmayı düşünmemek için biraz aptal hissediyorum, ancak daha sonra "" "tek bir alıntı değil, gerçek bir kesme işareti olarak gördüm). Denis
denis 63
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.