我正在尝试使用 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 函数中类似地使用,而不是尝试依赖$2
null。您还可以case
在 Bash 中使用语句。