Es gibt ein, wenn die Bedingung, wie unten
if [ "${1#*-}" = "$1" ]; then
echo "Do something"
fi
Aber könnte jemand erklären, was ist der Sinn der ${1#*-}
?
Es gibt ein, wenn die Bedingung, wie unten
if [ "${1#*-}" = "$1" ]; then
echo "Do something"
fi
Aber könnte jemand erklären, was ist der Sinn der ${1#*-}
?
${1#*-}
löscht die kürzeste Übereinstimmung von *-
, ein glob-ähnliches Muster von $1
Variable.
z. abcdef-xyz-foo
->xyz-foo
Ihre if
Scheck tatsächlich tut:
if $1 does not contain '-'
*-
ein Muster von einem -
eine (möglicherweise leere) Zeichenfolge gefolgt entsprechen. Der Operator löscht das Kürzeste Präfix passend *-
aus der Erweiterung $1
. Ein Beispiel:
$ foo="123-456"
$ echo "${foo#*-}"
456
$ foo="123-456-789"
456-789
ich betonen kürzeste, weil es einen Begleiter Betreiber ##
, der die längste passende Präfix fällt.
$ echo "${foo##*-}"
789
Dieser Test, wenn kein "-"
in einem Parameter 1 haben
sehen:
test=jhonatan
if [ "${test#*-}" = "$test" ]; then
echo "yes" ;
else
echo "no" ;
fi
Dieser Druck ja, weil keine haben "-"
in einem String Test
mit diesem
test=jhonatan-piffer
Das gleiche Skript Druck Nr.
Präfixmuster der Zeichenfolge entfernen.
In diesem letzten Fall alle Zeichenfolge zwischen Anfang bis "-"
echo ${test#*-}
Ergebnis in:
"piffer"
und "piffer"
von unterscheidet "jhonatan-piffer"
diese für weitere Informationen lesen: https://www.gnu.org/software/bash/manual/bash.html#Shell-Parameter-Expansion
erklären Sie auch gut, Danke. –
Fehlt das Schlüsselwort dafür in den Antworten unten, ist es das, was Sie ['Parametererweiterung'] (http://wiki.bash-hackers.org/syntax/pe) in' bash' nennen. – Inian
Vielen Dank für alle Teilnahme an dieser Frage. –