如何将fish shell中的字符串大写?

Édo*_*pez 7 string shell capitalize capitalization fish

我收到以下文字:

Lorem ipsum dolor sat amet,consectetur adipisicing elit。

我想大写,即每个单词的第一个字母大写。

预期结果

Lorem Ipsum Dolor Sit Amet,Consectetur Adipisicing Elit。

Bash 等效项

使用 bash,我使用了参数扩展:

function to-lower() { echo "$@" |tr '[:upper:]' '[:lower:]' ; }

function capitalize() {
    input="$(to-lower "$@")"
    for i in $input; do
        cap=$(echo -n "${i:0:1}" | tr "[:lower:]" "[:upper:]")
        echo -n "${cap}${i:1} "
    done
    echo
}
Run Code Online (Sandbox Code Playgroud)

问题

我如何以鱼的方式做到这一点?

fah*_*aho 2

Fish 目前没有任何工具可以执行此操作(在发行版中),因此假设您有 GNU sed 您可以执行此操作:

function capitalize
    echo $argv | sed 's/[^ _-]*/\u&/g'
end
Run Code Online (Sandbox Code Playgroud)

还有各种其他工具,您也可以使用 python 或从 Fish 调用 bash 来完成此操作,要点是无法提取子字符串或用内置的 Fish 替换字符。

在下一个 Fish 版本中,您将能够使用它string sub -l 1 $i来提取第一个字符。