フィッシュシェルで文字列操作を行うにはどうすればいいですか

フィッシュシェルで文字列操作を行うにはどうすればいいですか

Fish シェルで bash スタイルの文字列操作を行うにはどうすればよいでしょうか?

具体的には、bashでは

read branch < ".git/HEAD"
branch=${branch#ref: refs/heads/}

ブランチ名を$branch変数に格納します。

魚の殻で同じことをするにはどうすればいいでしょうか?

魚に関する資料をざっと見たのですが、何も見つかりませんでした。

答え1

fish シェルに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)

関連情報