Mam to polecenie w bash
:
cmd -c -s junk text.txt
Jeśli zmienię polecenie na
cmd -c junk -s text.txt
jak śledzić, który parametr ($2
lub $3
) jest ustawione na junk
?
Próbuję użyć pętli for, ale nie wiem, jak się dowiedzieć junk
od $@
.
Odpowiedzi:
1 dla odpowiedzi № 1Musisz użyć getopts wewnątrz twojego skryptu. Coś takiego powinno działać:
while getopts "c:s:" optionName; do
case "$optionName" in
s) arg="$OPTARG"; echo "-s is present with [$arg]";;
c) arg="$OPTARG"; echo "-c is present with [$arg]";;
esac
done
0 dla odpowiedzi nr 2
Z pokazanego przykładu wydaje się, że -s
opcja ma jeden argument i to jest junk
w pierwszym przykładzie. Jednak semantyka wydaje się zmieniać w drugim przykładzie i najwyraźniej -c
przyjmuje jeden argument i to znowu junk
. Również w drugim przykładzie wydaje się -s
trwa text.txt
jako argument.
Ogólnie argumenty w komendach basha nie mają stałych pozycji, ale jeśli opcja przyjmuje argument, to należy bezpośrednio postępować zgodnie z parametrem opcji (w pierwszym przypadku -s
).
Jak zauważył anubhava, możesz użyć getopts do przeanalizowania argumentów dla twojego skryptu. Nadal nie będzie to działać w przypadku, gdy zmienisz całą semantykę, tak jak się wydaje.