$ -7} sollte ein funktionierender Ersatz für $ sein, wenn garantiert ist, dass STR mindestens 7 Zeichen enthält. Wenn es kürzer sein könnte, wird sich OS X bash außerdem über negative Längen beschweren oder bei bash-Versionen, die negative Längen als Versatz von rechts betrachten, furchtbar falsch laufen.
Bash 4.3 Negative Länge der Unterzeichenfolge unter OS X
Bash 4.2 fügte Unterstützung für negative Teilkettenlängen hinzu:
http://tldp.org/LDP/abs/html/abs-guide.html#SUBSTREXTR01
Beispiel 37-12. Negativer Parameter im String-Extraktionskonstrukt
Wenn der Parameter "Länge" negativ ist, dient er als Offset-von-End-Parameter.
Zum Beispiel die folgenden Ausgaben "World", wenn sie unter Ubuntu getestet werden:
STR="Hello World!" echo $
In OS X (GNU bash, Version 4.3.42 (1) -release (x86_64-apple-darwin14.5.0)) verursacht diese Verwendung jedoch den folgenden Fehler:
-1: substring expression < 0
Ist dieses OS X-spezifisch oder wurde es in späteren Bash-Aktualisierungen wieder deaktiviert? Gibt es eine Möglichkeit, diese Funktionalität für OS X zu aktivieren?
2 Antworten auf die Frage
Während die Lösung von flabdablet nur für Zeichenfolgen mit fester Länge funktioniert, können Sie dies als Drop-In-Ersatz für Zeichenfolgen mit dynamischer Größe verwenden:
echo $ - 6 - 1))}
Im Detail:
${#STR}
gibt die Länge der Zeichenfolge zurück.$((a - b - c))
tut mathematische Subtraktion$
gibt einen Teilstring zurück.
Das zweite Argument für den Teilzeichenfolgenausdruck ist also die Länge der Zeichenfolge minus dem Startversatz minus dem Wert, den Sie in der neueren Bash-Syntax als negativen Wert angeben würden.
Verwandte Probleme
-
1
Pausieren Sie alle Aufgaben außer x CPU-intensiven Aufgaben
-
10
Wie kann ich die Bash-Historie durchsuchen und einen Befehl erneut ausführen?
-
2
Kann die Ausgabe eines Befehls an zwei andere Befehle weitergeleitet werden?
-
8
Benennen Sie eine Gruppe von Dateien mit einem Befehl um
-
2
Warum aktualisiert sich mein Pfad nicht * jetzt *?
-
5
Wie entferne ich einen symbolischen Link zu einem Verzeichnis?
-
8
Rette mich vor dem Kauderwelsch
-
9
Wie kann ich jeder Zeile einer Textdatei eine Zeilennummer und einen Tabulator voranstellen?
-
1
Wann sollte ich Konfigurationen in .bashrc vs einfügen? .bash_profile?
-
1
Umleitung: Wie kam das zusätzliche Wort in die Datei?