如何提取 Fish shell 中的子字符串?

How to extract substring in Fish shell?

我得到以下变量:

set location "America/New_York"

并希望仅显示 /(斜线)之前的部分 使用 fish shell 语法 .

预期结果

America

Bash相当于

使用bash,我只是简单地使用了一个参数扩展:

location="America/New_York"
echo ${location##*/}"

问题

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

一个可能的解决方案是使用 cut 但是,这看起来很老套:

set location "America/New_York"
echo $location|cut -d '/' -f1

America

从 fish 2.3.0 开始,有一个名为 string 的内置函数,它有几个子命令,包括 replace,因此您可以执行

string replace -r "/.*" "" -- $location

set location (string split "/" -- $location)[1]

http://fishshell.com/docs/current/commands.html#string

或者,cutsedawk 等外部工具也能正常工作。

使用 string split

的字段选择器 -f
> string split / "America/New_York" -f1
America

因此:

set location (string split / "America/New_York" -f1)

旁注:对于后一个涉及多个斜杠的字符串,我不知道有什么比繁琐的更好的了 -r -m1 -f2:

> string split / "foo/bar/America/New_York" -r -m1 -f2
New_York