Zasadniczo chcę „wyciągnąć” pierwsze wystąpienie -inf
z listy parametrów. (Pozostałe parametry zostaną przekazane do innego polecenia.)
Skrypt, który mam, ma następującą strukturę:
#!/bin/sh
<CODE>
for POSITIONAL_PARAM in "$@"
do
<CODE>
if [ "$POSITIONAL_PARAM" = '-inf' ]
then
<PLUCK $POSITIONAL_PARAM FROM $@>
break
fi
<CODE>
done
<CODE>
some-other-command "$@"
# end of script
Czy jest na to dobry sposób?
BTW, chociaż interesują mnie głównie odpowiedzi dotyczące /bin/sh
, interesują mnie również odpowiedzi dotyczące tylko /bin/bash
.
Odpowiedzi:
POSIXly:
Powyższy kod działa nawet w powłokach wcześniejszych niż POSIX, z wyjątkiem oryginalnej powłoki Almquist (Read Endnote ). Zmień
for
pętlę na:gwarancja pracy we wszystkich powłokach.
Kolejny POSIX:
Z tym jednym, trzeba usunąć pierwszy
(
w(pattern)
, aby pracować w muszli pre-POSIX.źródło
$1
). Ta właściwość przydała się w tym, co robię. Ponadto dziękuję za przypomnienie, żein "$@";
bit u góryfor
pętli jest niepotrzebny. Widziałem to wcześniej, ale zwykle o tym zapominam. Jeśli chodzi o twoją uwagę na temat powłoki Almquist, czydo
musi ona pojawić się w następnym wierszu, czyfor arg; do
też zadziała?for arg; do
praca w skorupie Almquistafor arg do
jest skrótem dlafor arg in "$@"; do
. To rzuciło mnie na około 5 sekund! Niektórzy mogą powiedzieć, że ten drugi jest bardziej czytelny :)Znalazłem to pytanie, próbując rozwiązać podobny problem, jednak chciałem przetworzyć wszystkie argumenty inne niż opcje (te, które nie zaczynają się od
-
) do dowolnego otrzymanego--
separatora. Chciałem wyłapać tylko przetworzone argumenty i pozostawić pozostałe na miejscu w podanej kolejności.Oto, co wymyśliłem.
źródło