Como posso fazer manipulações de strings no estilo bash no Fish Shell?
Especificamente, no bash
read branch < ".git/HEAD"
branch=${branch#ref: refs/heads/}
colocará o nome da filial na $branch
variável.
Como posso fazer o mesmo com casca de peixe?
Dei uma olhada na documentação de peixes, mas não encontrei nada.
Responder1
A casca do peixe agora possui um string
comando integrado.
Para usar string
em vez de sed
no seu caso:
set branch (string replace 'ref: refs/heads/' '' <.git/HEAD)
Ele pode operar com determinados argumentos ou com entrada padrão.
Há muito mais que string
podemos fazer. Dedocumentação do comando string:
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...]
Responder2
fish tem tudo a ver com minimalismo: se existe um utilitário comum que faz o trabalho facilmente, não é o fish. Então, como você diz, com sed:
set branch (sed 's#^ref: refs/heads/##' .git/HEAD)