Bash: konumsal parametrelerin dilimi


20

$@Önce tüm konum parametrelerini böyle bir diziye kopyalamak zorunda kalmadan bir dilim Bash'te nasıl alabilirim ?

argv=( "$@" )
echo "${argv[@]:2}";

1
Her zaman teklif verin "$@". You argvherhangi args boşluk içeriyorsa atama kırar.
jordanm

Yanıtlar:


31

Diğer herhangi bir diziyle aynı biçimi kullanabilirsiniz. 2. ve 3. elemanları çıkarmak için $@:

echo "${@:1:2}"
          - -
          | |----> slice length
          |------> slice starting index 

1
Ama bu v4.1.2'de karakter bazında karakter bazında çalışıyor gibi görünüyor, kelime bazında yapmanın bir yolu var mı?
Alexej Magura

@AlexejMagura Ne demek istediğini anlamıyorum. Bu, dizinin öğelerine etki eder. Tek karakterli öğeleriniz varsa, "karakterler üzerinde" çalışır. Her öğe bir sözcükse, sözcükler üzerinde çalışır. Belki bunu bir dizide değil, bir dizede mi deniyorsunuz?
terdon

Ben o noktada bir dize olabilir sanırım "$ @" bir kopyası üzerinde çalışıyorum, emin değilim.
Alexej Magura

Bas 4.2.46'da, "${@:1:2}"aslında bana 1. ve 2. komut satırı argümanlarını veriyor . Bu arada, "${@:1}"bana tam komut satırı argümanlarını verir ve"${@:0}" verir bana komut dosyası adını ve ardından tam komut satırı bağımsız değişkenlerini verir .
Rockallite

@ Rockallite iyi, evet. Dizinin 2. ve 3. öğeleri $@ 1. ve 2. bağımsız değişkenlerdir. "${@:1}"2. öğeden (1. bağımsız değişken) ${@:0}başlayarak dizinin tamamını ve komut dosyasının adı olan 1. öğeden başlayarak dizinin tamamını yazdırır . Ne bekliyordun?
terdon
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.