2016-04-14 16 views
1

Um alle Zeichen nach einer bestimmten Zeichenfolge in bash zu entfernen, habe ich herausgefunden, dass es zwei Möglichkeiten gibt, dies zu tun, entweder mit // oder %%.Bash Script: Unterschied zwischen %% und //

Zum Beispiel, wenn ich Dateien mit dem Format "Dies ist die 505-Datei von insgesamt 83018 Dateien" umbenennen will. Ich kann sie umbenennen, indem ich alles nach der "von" Zeichenkette entferne, so dass es nur "Diese 505 Akte" genannt wird, die diese 2 Weisen benutzt.

newfilename=${filename//of*} 

und

newfilename=${filename%%of*} 

diese beiden, wenn ausführen, werden alle Zeichen nach dem "von" string.

Ich frage mich, was ist der Unterschied zwischen der Verwendung von %% und // beim Entfernen von Teilen einer Zeichenfolge und wenn es Fälle gibt, wenn ich eine über die andere verwenden sollte.

Dank

+4

'Mann bash' Ihre beste Wette ist – anubhava

+1

' man bash 'ist nie deine beste Wette. –

+1

@ZephyrPellerin: Warum sagst du das? 'info bash' ist einfacher zu navigieren, aber die man-Seite enthält alle die gleichen Informationen. –

Antwort

3

Sie sind zwei verschiedene Funktionen

${string//find/replace} 

${string%%pattern} 

z.B.

$ var="here of there of"; echo ${var//of} 
here there 

, wenn Sie keine Ersatz-String liefern, es ist eine einfache löschen

$ var="here of there of"; echo ${var%%of} 
here of there 

dies dauert die längste Teilkette der Pattern-Matching