$ {1: 0: 2} bu bağlamda ne anlama geliyor?


19

Aşağıda gösterilen koduna arıyorum ve satır / sütun argümanlar ile başlamalı eğer girdi denetler -rveya -c. ${1:0:2}Bu bağlamda ne anlama geliyor?

rowArgName="-r"
colArgName="-c"
if [ "${1:0:2}" != $rowArgName ] && [ "${1:0:2}" != $colArgName ]
then
   echo $correctCmdMsg >&2
   exit 1
fi

7
Kullandığınız kabuğu soruya eklemelisiniz. Muhtemelen bash.
Raphael Ahrens

2
Bu komut satırı bağımsız değişkenlerini ayrıştırmak için yapılmış gibi görünüyor. Muhtemelen hayatınızı (veya bunu yapanların hayatını) bilmek getoptveya getoptskolaylaştırmak istersiniz .
Carlos Campderrós

Yanıtlar:


31

Kabuğun bir Substring Expansion (Parametre Expansion alt sınıfı) modelidir.

Biçim:

${parameter:offset:length}

ve indeksleme 0'dan başlar.

Diyelim ki bir değişkeniniz var foo, sonra ${foo:0:2}ilk iki karakteri verir (0 konumundan sonraki 2).

Misal:

$ foo=spamegg
$ echo "${foo:0:2}"
sp

Sizin durumunuzda, ilk sayı, komut satırından (ana programda) geçirilen ilk bağımsız değişken veya işleve iletilen ilk bağımsız 1değişken $1olan değişken adını belirtir .

Yani sizin durumunuzda "${1:0:2}":

  • indeks 0'dan başlayarak alt dizeyi çıkartmaya başla, yani ilk karakter

  • ve sonraki iki karaktere kadar devam et

böylece işlemden sonra giriş dizesinin ilk iki karakterini (0 ve 1'de dizine eklenmiş) alırsınız.

[ "${1:0:2}" != $rowArgName ]Ve [ "${1:0:2}" != $colArgName ]çıkış subtring diğer bazı dizeleri eşitse kontrol ediyoruz.


1
Esasen o olsun veya olmasın kullanıcı için kontrol ediyor ile 1 $ sağlanan -cveya -r, muhtemelen daha iyi olan uygulanmıştır hangigetopts
Sergiy Kolodyazhnyy

15

Küçük bir ekstrakt man bash:

$ {Parametre: kaydırma uzunluğu}

Substring Genişlemesi . İle belirtilen karakterle başlayan lengthdeğere kadar karaktere kadar genişler . Parametre ise veya veya tarafından ilişkilendirilmiş dizinlenmiş bir dizi veya ilişkilendirilebilir bir dizi adıysa, sonuçlar aşağıda açıklandığı gibi farklılık gösterir. Eğer atlanırsa, değerinin substring genişler tarafından belirtilen karakter başlayan ve değer ucuna uzanır. ve aritmetik ifadelerdir (aşağıdaki ARİTMETİK DEĞERLENDİRMEYE bakınız).parameteroffset@@*lengthparameteroffsetlengthoffset


5

Bu, bir değişkenten basit bir alt dize çıkarmadır. Söz konusu değişken betiğin ilk parametresidir (yani 1).

Eğer bir değişkenim varsa, FOO, değerinin ilk iki karakterini görebiliyorum ${FOO:0:2}. Aynı şey örneğinizde ilk argümanla da yapılmaktadır.

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.