Getopts kullanarak ayrıştırılmış öğeleri çıkardıktan sonra kalan argümanları nasıl alabilirim?


14

Getopts kullanarak bir bash komut dosyası için bazı bağımsız değişkenleri ayrıştırmak istiyorum ancak seçenek listesinde bulunmayan kalan bağımsız değişkenlere erişmek istiyorum. Örneğin, bir çağrım varsa:

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

Olurdum:

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

Getopts tarafından işlenmemesi gereken "burada diğer argümanları" almanın en kolay yolu nedir?

Yanıtlar:


17

bir arg çözümünü ayrıştırdığınızda veya

ayrıştırma işlemini bitirdikten sonra $ ((OPTIND -1)) öğesini kaydırın, sonra normal şekilde anlaşma

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

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

1
Her bir getopts çalıştırıldıktan sonra, $ OPTIND dikkate alınacak bir sonraki seçeneğin dizini olduğunu açıklamaya değer. Bu nedenle $ *, ilk geçerli çağrıyı 2, ikincisini 3 izleyen 3 parametre içerir. Bir çağrı geçersizse, önceki değerle birlikte bırakılır. Eğer parametre 1 geçerli değilse, OPTIND 1 olacaktır (bu nedenle yukarıdaki örnek shift $(expr 1 - 1)güvenli olacaktır .
sibaz

0

Ayrıştırma işleminin sonunda, $ @ değişkeni kaydırıldıktan sonra satırın sonunu içerir:

while getopts "ab:c:d" opt ; do
.
done
shift $((OPTIND-1))
OTHERARGS=$@
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.