我已经查看了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
目前,这就是“未知命令包含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
答案 0 :(得分:6)
如上所述,这是特定用例的最佳解决方案。但要回答这个问题,以防有人想做别的事。
你对contains
是正确的,它与列表项完全匹配。您可以改用switch
函数。这支持通配符匹配。
function code
set -l result (dirh)
switch $result
case '*sfk*'
cd ~/rails
case '*afk*'
cd ~/code
case '*'
echo $result
end
end