Bagaimana saya bisa mendapatkan arg yang tersisa setelah mengeluarkan item yang diurai menggunakan getop?


14

Saya ingin mem-parsing beberapa argumen ke skrip bash menggunakan getopts tetapi ingin dapat mengakses argumen yang tersisa yang tidak termasuk dalam daftar opsi. Jadi misalnya, jika saya memiliki panggilan:

% script -a -b param -c param -d other arguments here

Aku ingin:

while getopts "ab:c:d" opt ; do
.
done

Apa cara termudah untuk mendapatkan "argumen lain di sini", yang seharusnya tidak diproses oleh getopts?

Jawaban:


17

Anda perlu bergeser saat mengurai arg, atau meletakkan

shift $ ((OPTIND -1)) setelah Anda selesai melakukan parsing, kemudian lakukan transaksi dengan cara biasa misalnya

while getopts "ab:c:d" opt ; do
.
done
shift $(expr $OPTIND - 1 )

while test $# -gt 0; do
  echo $1
  shift
done

1
Perlu dijelaskan, bahwa $ OPTIND adalah indeks dari opsi selanjutnya yang harus dipertimbangkan, setelah setiap getup dijalankan. Karenanya adalah $ * berisi 3 parameter, mengikuti panggilan pertama yang valid itu 2, dan yang kedua adalah 3. Jika panggilan tidak valid, itu akan keluar dengan nilai sebelumnya. Jadi, jika parameter 1 tidak valid, OPTIND akan menjadi 1 (maka contoh di atas akan shift $(expr 1 - 1)yang aman.
sibaz

0

Di akhir parsing, setelah Anda menggeser variabel $ @ berisi bagian akhir baris:

while getopts "ab:c:d" opt ; do
.
done
shift $((OPTIND-1))
OTHERARGS=$@
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.