我得到了以下变量:
set location "America/New_York"
想要仅显示斜杆/
前面的部分,使用fish
shell语法。
期望结果
America
Bash等效命令
在bash中,我只是使用了参数扩展:
location="America/New_York"
echo ${location##*/}"
问题
我该如何用fish
的方式做到这一点?
我得到了以下变量:
set location "America/New_York"
想要仅显示斜杆/
前面的部分,使用fish
shell语法。
America
在bash中,我只是使用了参数扩展:
location="America/New_York"
echo ${location##*/}"
我该如何用fish
的方式做到这一点?
自fish 2.3.0版本开始,有一个名为string
的内置命令,其中包括replace
等多个子命令,因此您可以执行以下操作:
string replace -r "/.*" "" -- $location
或者set location (string split "/" -- $location)[1]
请查看http://fishshell.com/docs/current/commands.html#string,或者使用外部工具如 cut
、sed
或 awk
。
cut
,但这看起来很不专业:set location "America/New_York"
echo $location|cut -d '/' -f1
美国
${location%%/*}
进行参数扩展。这个答案是fish的方式。从设计文档中可以看到:“其他Shell语言可以做的所有事情都应该在fish中实现,尽管fish可能会依赖外部命令来完成。” - glenn jackman-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
set a, b (string split / foo/bar)
- Dennis