Nie jestem facetem od Linuksa, ale utknąłem w skrypcie, który muszę przeczytać w moim Projekcie. Czy więc ktoś może mi pomóc w wykonywaniu tego polecenia?
shift $(($optind - 1))
bash
shell
shell-script
Gaurav Pant
źródło
źródło
Odpowiedzi:
shift $((OPTIND-1))
(uwagaOPTIND
jest pisana wielkimi literami) zwykle znajduje się natychmiast pogetopts
while
pętli.$OPTIND
jest liczba znalezionych przez opcjigetopts
.Jak pauljohn32 wspomina w komentarzach, mówiąc ściśle,
OPTIND
podaje pozycję następnego argumentu wiersza poleceń.Z podręcznika GNU Bash Reference :
shift
nusuwa n ciągów z listy parametrów pozycyjnych. W ten sposób
shift $((OPTIND-1))
usuwa wszystkie przeanalizowane opcjegetopts
z listy parametrów, a więc po tym punkcie$1
będzie odnosił się do pierwszego nieopcji argumentu przekazanego do skryptu.Aktualizacja
Jak mikeserv wspomina w komentarzu,
shift $((OPTIND-1))
może być niebezpieczne. Aby zapobiec niechcianemu dzieleniu słów itp., Wszystkie rozszerzenia parametrów powinny być cytowane. Tak więc bezpieczną formą polecenia jestshift "$((OPTIND-1))"
źródło
find
) mogą wyglądać, jakby dopuszczały opcje po braku opcji, ale nie mają: mają operandy, które zaczynają się od myślnika.IFS
, ale lepiej być bezpiecznym niż żałować. ;)IFS=0123456789
,shift $((OPTIND-1))
(bez cudzysłowów) zmieni się w,shift ""
który zostanie po cichu zignorowany (inksh
) lub wygeneruje błąd (inbash
idash
).$((...))
po prostu oblicza rzeczy. W twoim przypadku bierze ona wartość$optint
i odejmuje 1.shift
usuwa parametry pozycyjne. W twoim przypadku usuwaoptint-1
parametry.Aby uzyskać więcej informacji zajrzyj na
help getopts
,help shift
, spojrzenieman bash
na „arytmetycznego”, a zwłaszcza googlegetopts
.źródło