Grundsätzlich möchte ich das erste Vorkommen von -inf
aus der Parameterliste "herauszupfen" . (Die restlichen Parameter werden an einen anderen Befehl übergeben.)
Das Skript, das ich habe, hat die folgende 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
Gibt es eine gute Möglichkeit, dies zu tun?
Übrigens, obwohl ich hauptsächlich an Antworten interessiert bin, die auf zutreffen /bin/sh
, bin ich auch an Antworten interessiert, die nur auf zutreffen /bin/bash
.
Antworten:
POSIXly:
Der obige Code funktioniert sogar in Pre-POSIX-Shells mit Ausnahme der ursprünglichen Almquist-Shell ( Endnote lesen ). Ändern Sie die
for
Schleife in:Garantie für die Arbeit in allen Schalen.
Ein weiteres POSIX:
Mit diesem, müssen Sie die erste entfernen
(
in(pattern)
es in pre-POSIX - Schalen zu arbeiten.quelle
$1
). Diese Eigenschaft hat sich als nützlich erwiesen, was ich tue. Vielen Dank auch, dass Sie mich daran erinnert haben, dass dasin "$@";
Bit oben in derfor
Schleife nicht erforderlich ist. Es ist etwas, was ich schon gesehen habe, aber ich neige dazu, es zu vergessen. In Bezug auf Ihre Bemerkung über den Almquist Shell, werden diedo
haben in der nächsten Zeile angezeigt werden soll , oder würdenfor arg; do
auch funktionieren?for arg; do
Arbeit in Almquist Shellfor arg do
ist eine Abkürzung fürfor arg in "$@"; do
. Das warf mich für ca. 5 Sekunden! Einige könnten sagen, das letztere ist besser lesbar :)Ich habe diese Frage gefunden, als ich versucht habe, ein ähnliches Problem zu lösen, aber ich wollte alle Nicht-Options-Argumente (die nicht mit beginnen
-
) bis zu einem empfangenen--
Trennzeichen verarbeiten. Ich wollte nur die verarbeiteten Argumente herauszupfen und die übrigen in der angegebenen Reihenfolge an Ort und Stelle belassen.Folgendes habe ich mir ausgedacht.
quelle