Benim bash betiğimin içinde, sıfır, bir veya iki parametreyi (komut dosyası tanıyabilir) ayrıştırmak, sonra kalan parametreleri komut dosyasında çağrılan bir komuta iletmek istiyorum. Bunu nasıl yapabilirim?
Benim bash betiğimin içinde, sıfır, bir veya iki parametreyi (komut dosyası tanıyabilir) ayrıştırmak, sonra kalan parametreleri komut dosyasında çağrılan bir komuta iletmek istiyorum. Bunu nasıl yapabilirim?
Yanıtlar:
shift
Bağımsız değişkenleri "yemek" için yerleşik komutu kullanın. Daha sonra alt işlemi çağırın ve "$@"
kalan tüm argümanları içerecek şekilde argümanı iletin. Bağımsız değişken listesinin genişletilmesinin düzgün bir şekilde alıntılanmasına neden olduklarından, tırnaklara dikkat edilmelidir.
$@
temelde dizinin her bir elemanına alıntılanmış bir dize olarak davranır - genişleme fırsatı olmadan iletilirler. Ayrıca her birinin ayrı bir kelime olarak görülmesini sağlar. Farkı gösteren bir test komut dosyası ile birlikte bu açıklama burada: tldp.org/LDP/abs/html/internalvariables.html#APPREF
bash shift komutunu kullanır :
örneğin shifttest.sh:
#!/bin/bash
echo $1
shift
echo $1 $2
shifttest.sh 1 2 3 üretir
1
2 3
$1
tırnak işareti olmadan olduğu gibi iletirseniz "$1"
, kabuk sözcük bölme işlemini gerçekleştirir, bu nedenle örneğin ve ayrı foo bar
olarak iletilir . foo
bar
Bash, alt ayar parametrelerini destekler (bkz. Alt Kümeler ve alt dizeler ), böylece hangi parametrelerin bu şekilde işleneceğini / aktarılacağını seçebilirsiniz.
yeni dosya aç ve düzenle: vim r.sh
:
echo "params only 2 : ${@:2:1}"
echo "params 2 and 3 : ${@:2:2}"
echo "params all from 2: ${@:2:99}"
echo "params all from 2: ${@:2}"
çalıştırın:
$ chmod u+x r.sh
$ ./r.sh 1 2 3 4 5 6 7 8 9 10
sonuç:
params only 2 : 2
params 2 and 3 : 2 3
params all from 2: 2 3 4 5 6 7 8 9 10
params all from 2: 2 3 4 5 6 7 8 9 10