如何在 Fish shell 中执行 bash 样式的字符串操作?
具体来说,在 bash 中
read branch < ".git/HEAD"
branch=${branch#ref: refs/heads/}
将把分支名称放入$branch
变量中。
我怎样才能在 fish shell 中做同样的事情?
我浏览了有关鱼的文件,但没有发现任何东西。
答案1
fish shell 现在有一个string
内置命令。
在您的案例中,使用string
而不是:sed
set branch (string replace 'ref: refs/heads/' '' <.git/HEAD)
它可以对给定的参数或标准输入进行操作。
还有很多事情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...]
答案2
fish 完全遵循极简主义:如果有一个常见的实用程序可以轻松完成工作,那么它肯定不是 fish。因此,正如您所说,使用 sed:
set branch (sed 's#^ref: refs/heads/##' .git/HEAD)