이 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개의 변수가 전달되면 한 가지 작업을 수행하고 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 함수에서 비슷한 것을 사용해야 합니다 $2. caseBash에서 명령문을 사용할 수도 있습니다 .

관련 정보