2017-01-23 9 views
3

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#*-}?

+0

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

+0

Vielen Dank für alle Teilnahme an dieser Frage. –

Antwort

6

${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 '-' 
4

*- 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 
2

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

+0

erklären Sie auch gut, Danke. –

Verwandte Themen