如何将此 bash 函数转换为 Fish shell

如何将此 bash 函数转换为 Fish shell

我正在尝试使用 Fish shell 2.0 来替代 bash。我正在尝试将以下 bash 函数转换为 Fish 函数,但它给了我地狱。我有几个类似的功能,所以如果有人能用一个例子为我指出正确的方向,我将非常感激

connect() {
    if [ "$2" != "" ]
    then
            ssh -ti ~/.ssh/work/id_rsa user@host$1.domain.com "sudo ssh $2"
    fi
    if [ "$2" == "" ]
    then
            ssh -ti ~/.ssh/work/id_rsa user@host$1.domain.com "sudo -i"
    fi
}

尝试用 $argv[1] 和 $argv[2] 替换 $1 和 $2,但它抱怨无法找到块的末尾。我知道它是因为鱼类的脚本语法非常不同。我尝试从一个更简单的函数开始,但在弄清楚如何让它在传递 1 个变量时执行一件事,以及如果传递 2 个变量时执行另一件事时遇到了麻烦:

function testvarz
    switch "$argv[2]";
            case ""
                    echo "no second variable passed"
            case != ""
                    echo "second variable passed"
    end

end

但这不起作用,如果你传递 2 个变量,它什么也不做,如果你传递 1 它会抱怨

答案1

这是一个与您的测试函数类似的工作函数。

 function testvarz
      switch (count $argv)
          case 0
              echo 'zero'
          case 1
              echo "one $argv[1]"
          case 2
              echo "two $argv[1] $argv[2]"
          case '*'
              echo 'else'
      end
  end

您可以为您的函数使用类似的结构connect

顺便说一句,您应该$#在 Bash 函数中类似地使用,而不是尝试依赖$2null。您还可以case在 Bash 中使用语句。

相关内容