Echo $ -1 ne gösterir?


14

Çıktısı ne yok echo $-1, echo $-2, echo $-3.. demek?

Linux kutularımdan birinde bana şunu gösteriyor:

echo $-1
imsBEl1
echo $-2
imsBEl2

Ve başka bir Linux kutusunda, şunu gösterir:

echo $-1
himBH1
echo $-2
himBH2

Bazı bellek konumlarıyla mı yoksa başka bir şeyle mi eşleniyorlar?


1
Başlık kenar çubuğunda aşağıdaki sorunu gösteriyor: meta.stackexchange.com/q/229363/205964
IQAndreas

Düzeltmeye çalışan önerilen bir düzenleme ekledim, ancak yakında MathJax'ı oluşturan kenar çubuğunun olduğunu fark ettim, yani başlık bu sayfada olduğunda, sadece gereksiz ters eğik çizgiler alır.
IQAndreas

Yanıtlar:


19

POSIX $ olarak tanımladı :

-

(Tire.) Çağrıldığında, set özel yerleşik komutuyla veya örtük olarak kabuk tarafından belirtildiği şekilde geçerli seçenek bayraklarına (bir dizeye birleştirilen tek harfli seçenek adları) genişler.

Yani $-kabuğunuzda veya onu nasıl çağırdığınızda farklı bir temel olabilir.

1veya 2burada ayrılmış jeton vardır. Kabuk unquote gördüğünde $, parametre genişletme, komut değiştirme veya aritmetik genişletme için herhangi bir adayın başlangıcını belirler. Gördü $-ve genişletti, gerisini değiştirmedi.

Daha fazla ayrıntı için Jeton Tanıma bölümünü görebilirsiniz .


18

echo $-geçerli kabuğun seçeneklerini ( -önek olmadan ) yazdırır . 1ve 2alakasız ek jetonlardır.


11

Miroslav'ın cevabına ekleme:

echo $-geçerli kabuğun seçeneklerini ( -önek olmadan ) yazdırır . 1 ve 2, ilintisiz ek tokenlerdir.

Bu, bunların sırasıyla her makine için seçenek olduğu anlamına gelir.

imsBEl
himBH

Her bir bayrağın anlamını araştırdım ve küçük anlamları ile aşağıdaki anlamları derledim.

-ben

-İ seçeneği varsa, kabuk etkileşimlidir.

-m

Monitör modu. İş kontrolü etkin.

-B

Kabuk küme ayracı genişletmesi gerçekleştirir ( bkz. Ayraç Genişletme ). Bu varsayılan olarak etkindir.

-s

-S seçeneği varsa veya seçenek işlendikten sonra hiçbir bağımsız değişken kalmazsa, komutlar standart girdiden okunur. Bu seçenek, etkileşimli bir kabuk çağrılırken konumsal parametrelerin ayarlanmasını sağlar.

-E

errtrace

-l

Bash'i bir giriş kabuğu olarak çağrılmış gibi yap

-h

hashall

-H Tarihin Genişlemesi

Bu özellik etkileşimli kabuklar için varsayılan olarak etkindir.


3

Varolan yanıtları genişletmek için, deneyin echo "${-1}"ve echo "${-2}"- bir "Kötü ikame" hatası alırsınız, çünkü -1değişken adı olarak tanımlamak yerine , değişken adı tanımsızdan önce bir değerin yerine tire kullanılır . Örneğin:

$ unset foo
$ echo "${foo-bar}"
bar
$ foo=test
$ echo "${foo-bar}"
test
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.