Na przykład, jeśli mam skrypt ./foo, który pobiera 10 parametrów, a chcę przekazać tylko 8 parametr. Jedyny sposób, w jaki wiem, jak to zrobić obecnie, to:
./foo '' '' '' '' '' '' '' 'bar'
Czy istnieje łatwiejszy / lepszy sposób?
shell-script
parameter
Kerry Randolph
źródło
źródło
Odpowiedzi:
Innym sposobem na zrobienie tego jest nazwanie parametru, który chcesz zadeklarować, a następnie:
WYNIK
W powyższym przykładzie jawnie zadeklarowana zmienna środowiskowa jest lepsza niż argument wiersza poleceń, ale argument wiersza poleceń jest używany, gdy zmienna środowiskowa jest pusta lub nie jest ustawiona. Gdy zarówno 8. pozycja, jak i zmienna środowiskowa
$eight
są puste lub nieuzbrojone, zostaje przypisana wartość domyślna some_default$eight
. W obu przypadkach:
można usunąć z instrukcji:-
lub:=
, jeśli puste powinno być dopuszczalną wartością.Zmienną
$eight
równie dobrze można ustawić w następujący sposób:... a poprzedni wiersz został całkowicie pominięty, ale chciałem wykazać, że zadeklarowanie zmiennej w ten sposób skutkuje trwałą wartością, więc zrobiłem to w dwóch poleceniach. W obu przypadkach
$eight
ustawiana jest końcowa wartość rozszerzenia tego parametru złożonego.getopts
- w przypadku niezawodnych skryptów - często jest najlepszym sposobem obsługi opcji poleceń . Z drugiej strony parametry pozycyjne są prawie zawsze najprostszym sposobem niezawodnej obsługi operandów w skrypcie.Na przykład:
WYNIK
Widzimy tylko ósmy operand, ale jest ich 101 globowanych z mojego katalogu testowego.
źródło
Zakładając, że możesz zmienić skrypt, powinieneś rozważyć użycie opcjonalnych parametrów (opcji) zamiast wymaganych parametrów (argumentów).
Jeśli masz każdy z pierwszych 7 siedmiu parametrów jako opcje i masz domyślnie pusty ciąg znaków, możesz po prostu zrobić:
Jeśli używasz powłoki kompatybilnej z POSIX , możesz użyć
getopts
narzędzia lub programugetopt
.bash
- jak większość muszli - oferujegetopts
jako wbudowane. Tak czy inaczej jest łatwiejsze niż tworzenie własnego parsera wiersza poleceń.O ile nie zaimplementujesz czegoś takiego jak ostatnie X argumentów nie będących opcjami, to wartości ostatnich argumentów Y i argumentów opcji XY, musisz podać ciągi opcji przed każdym z 7 (teraz pustych) ciągów, jeśli chcesz ustawić którykolwiek z nich. Nie jest to jednak powszechna praktyka, zwykle opcja jest zawsze opcją, a argument argumentem, a kolejność opcji „wstawiania” jest dowolna.
źródło
+1
dlagetopt(s)
. Parametry pozycyjne to smutny czas i należy go unikać.