Kodunuzun ayrıştırma bitini komut satırı yazdığınızda, hangi seçeneklerin bağımsız değişken alacağını ve hangilerinin almadığını belirtirsiniz. Örneğin, bir -hseçeneği (örneğin yardım için) ve -abağımsız değişken alması gereken bir seçeneği kabul eden bir kabuk komut dosyasında ,
opt_h=0 # default value
opt_a=""
while getopts 'a:h' opt; do
case $opt in
h) opt_h=1 ;;
a) opt_a="$OPTARG" ;;
esac
done
echo "h: $opt_h"
echo "a: $opt_a"
a:hBit "Ben iki seçenek ayrıştırmak bekliyorum diyor -ave -hve -abir argüman almalıdır" (bu kadar :sonra ao ayrıştırıcı söyler -abir argüman alır).
Bu nedenle, bir seçeneğin nerede bittiği, değerinin nerede başladığı ve bundan sonra başka bir seçeneğin nerede başladığı konusunda hiçbir belirsizlik yoktur.
Koşu:
$ bash test.sh -h -a hello
h: 1
a: hello
$ bash test.sh -h -ahello
h: 1
a: hello
$ bash test.sh -hahello
h: 1
a: hello
Bu nedenle, seçenekleri ayrıştırmak için çoğu zaman kendi komut satırı ayrıştırıcısını yazmamalısınız.
Bu örnekte zor olan tek bir durum var. Ayrıştırma genellikle ilk olmayan seçenekte durur, bu nedenle komut satırında seçeneklere benzeyen şeyler olduğunda :
$ bash test.sh -a hello -world
test.sh: illegal option -- w
test.sh: illegal option -- o
test.sh: illegal option -- r
test.sh: illegal option -- l
test.sh: illegal option -- d
h: 0
a: hello
Aşağıdakiler bunu çözer:
$ bash test.sh -a hello -- -world
h: 0
a: hello
--Sinyaller komut satırı seçeneklerinin bir uç ve -worldbiraz da (o pozisyonel değişkenlerden birinin içinde) ne isterse yapmaya program için bırakılır.
Bu arada, dosya adının başında tire işareti olan bir dosyayı nasıl kaldırdığınızdır rm.
DÜZENLE :
C çağrısında getopt()(beyan edilen unistd.h) yazılan yardımcı programlar hemen hemen aynı şekilde çalışır. Aslında, bildiğimiz her şey için, bashfonksiyon getoptsC kütüphanesi fonksiyonuna bir çağrı kullanılarak uygulanabilir getopt(). Perl, Python ve diğer diller benzer komut satırı ayrıştırma kitaplıklarına sahiptir ve büyük olasılıkla ayrıştırmalarını benzer şekilde yaparlar.
Bu getoptve getoptbenzeri kütüphane rutinlerinden bazıları "uzun" seçenekleri de işler. Bunlar edilir genellikle çift çizgi (öncesinde --örneğin sık sık argümanları alır eşit işaretinden sonra yapar) ve uzun seçenekleri --block-size=SIZEseçeneği [bazı uygulamaları] du(ayrıca izin veren yardımcı -B SIZEaynı şeyi belirtmek için).
Kılavuzlar genellikle kısa seçenekler ve argümanları arasında bir boşluk göstermek için yazılır, muhtemelen okunabilirlik içindir.
DÜZENLEME : ve yardımcı programları gibi gerçekten eski araçlar önlerinde tire işareti olmayan seçeneklere sahiptir. Bu tamamen tarihsel nedenlerden ve tam da bu şekilde çalışmalarına dayanan yazılımlarla uyumluluğu sağlamak içindir. Yardımcı program, son zamanlarda tire ile seçenek alma yeteneği kazandı. BSD kılavuzu, "paket bayrakları" için eski stil seçeneklerini çağırır.ddtartartar