GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Was macht % in Linux-Shell-Strings?

Wenn % wird in Muster ${variable%substring} verwendet es gibt den Inhalt von variable zurück mit dem kürzesten Vorkommen von substring gelöscht von der Rückseite von variable .

Diese Funktion unterstützt Platzhaltermuster - deshalb akzeptiert sie Sterne (Sternchen) als Ersatz für null oder mehr Zeichen.

Es sollte erwähnt werden, dass dies Bash-spezifisch ist - andere Linux-Shells enthalten diese Funktion nicht unbedingt.

Wenn Sie mehr über die String-Manipulation in Bash erfahren möchten, empfehle ich Ihnen dringend, diese Seite zu lesen. Neben anderen praktischen Funktionen erklärt es zum Beispiel, was %% macht tun :)

Bearbeiten:Ich habe vergessen, das zu erwähnen, wenn es in Muster $((variable%number)) verwendet wird oder $((variable1%$variable2)) die % Zeichen fungiert als Modulo-Operator. DavidPostill enthält in seiner Antwort spezifischere Dokumentationslinks.

Wenn % in einem anderen Kontext verwendet wird, sollte es nur als reguläres Zeichen erkannt werden.


Bash-Referenzhandbuch:Shell-Parametererweiterung

${parameter%word}
${parameter%%word}

Das Wort wird erweitert, um ein Muster zu erzeugen, genau wie bei der Dateinamenerweiterung. Wenn das Muster mit einem abschließenden Teil des erweiterten Werts von Parameter übereinstimmt , dann ist das Ergebnis der Erweiterung der Wert von parameter mit dem kürzesten übereinstimmenden Muster (der ‘%’ Fall) oder das längste übereinstimmende Muster (der ‘%%’ Fall) gelöscht. Wenn Parameter ist ‘@’ oder ‘*’, die Musterentfernungsoperation wird der Reihe nach auf jeden Positionsparameter angewendet, und die Erweiterung ist die resultierende Liste. Wenn Parameter ist eine mit ‘@’ subskribierte Array-Variable oder ‘*’, Die Musterentfernungsoperation wird der Reihe nach auf jedes Mitglied des Arrays angewendet, und die Erweiterung ist die resultierende Liste.


Durch Experimentieren finde ich heraus, dass eine Übereinstimmung nach % verworfen wird, wenn die Zeichenfolge in geschweiften Klammern (geschweifte Klammern) eingeschlossen ist.

Zur Veranschaulichung:

touch abcd         # Create file abcd

for file in ab*; do
 echo $file        # echoes the filename
 echo $file%       # echoes the filename plus "%"
 echo ${file%}     # echoes the filename
 echo "${file%}"   # echoes the filename
 echo
 echo "${file%c*}" # Discard anything after % matching c*
 echo "${file%*}"  # * is not greedy
 echo ${file%c*}   # Without quotes works too
 echo "${file%c}"  # No match after %, no effect
 echo $file%c*     # Without {} fails
done

Hier ist die Ausgabe:

abcd
abcd%
abcd
abcd

ab
abcd
ab
abcd
abcd%c*

Linux
  1. Linux – Was macht ‚make Localmodconfig‘?

  2. Was bedeutet „:-“ in einem Shell-Skript?

  3. Linux – Was macht die „nointremap“-Option von Linux?

  4. Was bedeutet Echo $? Tun??

  5. Was bedeutet - in diesem Linux-Befehl?

Was ist die Shell unter Linux?

Was bedeutet Cat-Befehl unter Linux?

Was bedeutet es, „sh-kompatibel“ zu sein?

Was ist Subshell in Linux?

Was ist die Login-Shell in Linux?

Was ist Shebang in Linux Shell Scripting?