このbash機能をFish Shellに変換する方法

このbash機能をFish Shellに変換する方法

私はbashの代替としてFish Shell 2.0を使用しようとしています。次の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
}

$1と$2を$argv[1]と$argv[2]に置き換えようとしましたが、ブロックの終わりが見つからないと文句を言いました。私は魚のスクリプトの構文が非常に異なるので、それを知っています。私はもっ​​と簡単な関数で始めましたが、1つの変数が渡された場合は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

ところで、null$#に依存するのではなく、Bash関数で同様のものを使用する必要があります$2caseBashでステートメントを使用することもできます。

関連情報