Fish 목록에서 변수를 추출하는 방법은 무엇입니까?

Fish 목록에서 변수를 추출하는 방법은 무엇입니까?

그래서 최근에 Linux와 유사한 명령을 많이 공유하는 cli를 다운로드했습니다. 좋아요 mega-login: login& mega-logout: logout cli를 사용해야 할 때마다 대용량 파일을 작성하는 데 지쳤습니다. 별칭을 사용할까도 생각했지만, 내가 모르는 다른 명령을 사용하여 다른 프로그램을 망치고 싶지는 않습니다. 별칭을 생성하면 login시스템 login명령은 어떻게 되나요? 또한 cli에는 많은 명령이 있습니다.

그래서 스크립트를 활용해볼까도 생각했지만 어떻게 해야 할지 몰랐습니다. 이것이 내 생각이다. 그래서 m loginor 를 사용하면 m logout해당 명령을 검색하거나 존재 mega-login하는지 검색 mega-logout한 다음 호출합니다.

그래서 Fish를 배우면서 몇 시간 동안 다양한 기능을 생각해 보고 이렇게 썼습니다.

function m --argument value $argv
    echo value $value $argv
    if type mega-$value
        set MEGA
        for temp in $argv
            set MEGA $MEGA$temp
            echo $MEGA
        end
        echo MEGA \n\n $MEGA
        eval $MEGA
    end
end

여전히 작동하지 않습니다. PS: 처음으로 글을 쓰려고 했는데, 이해가 안 되서 포기했습니다.

function m --argument value $argv
    echo value $value $argv
    if type mega-$value
        set MEGA mega-$argv
        echo $argv \n\n\n $MEGA
    eval $MEGA
    end
end

답변1

첫 번째(그리고 두 번째) 시도에서는 나쁘지 않습니다. 제대로 맞추는 것은 까다로울 수 있습니다.

어때요?

function m
    set -l mega_cmd "mega-$argv[1]"
    set -l mega_args $argv[2..]
    if type -q "$mega_cmd"
        echo "Executing $mega_cmd $mega_args"
        "$mega_cmd" $mega_args
    end
end

물론 이것은 가독성을 위한 것입니다(제가 선호하는 것입니다). 그러나 다음과 같이 단순화할 수 있습니다.

function m
    if type -q "mega-$argv[1]"
        echo "Executing mega-$argv[1] $argv[2..]"
        "mega-$argv[1]" $argv[2..]
    end
end

관련 정보