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 -h
seçeneği (örneğin yardım için) ve -a
bağı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:h
Bit "Ben iki seçenek ayrıştırmak bekliyorum diyor -a
ve -h
ve -a
bir argüman almalıdır" (bu kadar :
sonra a
o ayrıştırıcı söyler -a
bir 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 -world
biraz 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, bash
fonksiyon getopts
C 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 getopt
ve getopt
benzeri 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=SIZE
seçeneği [bazı uygulamaları] du
(ayrıca izin veren yardımcı -B SIZE
aynı ş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.dd
tar
tar
tar