我已经查看了Stack Overflow上的所有类似问题,并在他们的文档中尝试了很多东西.我目前的尝试如下.
我想要实现的是基于计算机用户的差异行为.我有一台工作计算机和一台家用计算机,当我在命令行输入"代码"时,我希望工作计算机转到另一个目录,而不是我在家中输入时所需的代码.我试过这个(我的工作用户名是afk,home是sfk):
function code
set result (dirh)
if [contains "sfk" $result]
cd ~/rails
else if [contains "afk" $result]
cd ~/code
else
echo $result
end
end
Run Code Online (Sandbox Code Playgroud)
目前,这是"未知命令包含Users/sfk/.config/fish /"(我的PWD是Users/sfk/.config/fish /当我输入时).我想也许包含只是用于列表,但文档对此并不是特别清楚?知道怎么做这个吗?
编辑
刚试过这个,虽然它不再是错误,但它最终会出现在else情况下,它不应该导致我的用户IS sfk,它包含在dirh字符串中:
function code
set result (dirh)
if test (contains "sfk" $result)
cd ~/rails
else if test (contains "afk" $result)
cd ~/code
else
echo $result
end
end
Run Code Online (Sandbox Code Playgroud)
如上面评论中所述,这是此特定用例的最佳解决方案.但要回答这个问题,万一有人想做别的事情.
你是对的contains,它与列表项完全匹配.您可以改用该switch功能.其中支持通配符匹配.
function code
set -l result (dirh)
switch $result
case '*sfk*'
cd ~/rails
case '*afk*'
cd ~/code
case '*'
echo $result
end
end
Run Code Online (Sandbox Code Playgroud)