如何在鱼壳中进行字符串操作

bla*_*ing 5 string-manipulation fish

如何在 Fish shell 中进行 bash 样式的字符串操作?

具体来说,在 bash

read branch < ".git/HEAD"
branch=${branch#ref: refs/heads/}
Run Code Online (Sandbox Code Playgroud)

将分支名称放在$branch变量中。

我如何在鱼壳中做同样的事情?

我浏览了鱼的文档,但没有找到任何东西。

Mat*_*ttH 6

鱼壳现在有一个string内置命令。

在您的情况下使用string而不是sed

set branch (string replace 'ref: refs/heads/' '' <.git/HEAD)
Run Code Online (Sandbox Code Playgroud)

它可以对给定的参数或标准输入进行操作。

还有很多事情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...]
Run Code Online (Sandbox Code Playgroud)


gle*_*man 3

Fish 完全是极简主义:如果有一个通用实用程序可以轻松完成这项工作,那么它不会在 Fish 中。所以,正如你所说,使用 sed:

set branch (sed 's#^ref: refs/heads/##' .git/HEAD)
Run Code Online (Sandbox Code Playgroud)