Wie kann ich Zeichenfolgenmanipulationen im Bash-Stil in der Fish-Shell durchführen?
Insbesondere in Bash
read branch < ".git/HEAD"
branch=${branch#ref: refs/heads/}
wird den Zweignamen in $branch
eine Variable einfügen.
Wie kann ich dasselbe in einer Fischschale tun?
Ich habe einen Blick auf die Dokumentation zu den Fischen geworfen, aber nichts gefunden.
Antwort1
Die Fish-Shell verfügt jetzt über einen string
integrierten Befehl.
In Ihrem Fall verwenden Sie string
stattdessen :sed
set branch (string replace 'ref: refs/heads/' '' <.git/HEAD)
Es kann mit angegebenen Argumenten oder mit der Standardeingabe operieren.
Es gibt noch viel mehr, was string
man tun kann. Von derDokumentation des Zeichenfolgenbefehls:
Synopsis
string length [(-q | --quiet)] [STRING...]
string sub [(-s | --start) START] [(-l | --length) LENGTH] [(-q | --quiet)]
[STRING...]
string split [(-m | --max) MAX] [(-r | --right)] [(-q | --quiet)] SEP
[STRING...]
string join [(-q | --quiet)] SEP [STRING...]
string trim [(-l | --left)] [(-r | --right)] [(-c | --chars CHARS)]
[(-q | --quiet)] [STRING...]
string escape [(-n | --no-quoted)] [STRING...]
string match [(-a | --all)] [(-i | --ignore-case)] [(-r | --regex)]
[(-n | --index)] [(-q | --quiet)] [(-v | --invert)] PATTERN [STRING...]
string replace [(-a | --all)] [(-i | --ignore-case)] [(-r | --regex)]
[(-q | --quiet)] PATTERN REPLACEMENT [STRING...]
Antwort2
Bei fish dreht sich alles um Minimalismus: Wenn es ein allgemeines Dienstprogramm gibt, das die Arbeit problemlos erledigt, dann ist es nicht in fish. Also, wie Sie sagen, mit sed:
set branch (sed 's#^ref: refs/heads/##' .git/HEAD)