2017-09-28 5 views
1

나는 다음과 같은 $argv의 길이 또는 함수의 첫 번째 $argv[1] 요소의 값을 테스트하는 것을 시도하고있다 :어항에서 argv [1]의 argv 수와 값을 테스트하는 방법은 무엇입니까?

function do-something 
    if test (count $argv) -lt 2 -o $argv[1] = "--help" 
    echo Usage ... 
    end 
end 

을 그러나, 나는 다음과 같은 오류가 점점 오전 :

⟩ do-something 
test: Missing argument at index 6 

문제는 문자열 비교와 함께,하지만이 작동하는 방법을 잘 모르겠습니다. -o [ $argv[1] = "--help" ]도 시도했지만 다른 오류와 함께 실패합니다.

인수가 포함 된 경우에도 작동하므로 첫 번째 오류가 발생하더라도 fish이 두 번째 조건을 평가하고있는 것 같습니다. 이거 버그 야?

답변

2

(count $argv)$argv[1]은 같은 명령에 대한 인수이기 때문에 동시에 확장되지 않으며 설정하지 않으면 $argv[1]이 비어 있습니다. 인수가 없었다 그래서 만약, test는보고 :

if test (count) -lt 2 -o = "--help"

오류가 발생.

이 문제를 해결하는 가장 간단한 방법은 $argv[1]을 인용하는 것입니다 :

if test (count $argv) -lt 2 -o "$argv[1]" = "--help" 

따옴표가 "$argv[1]" 대신 인수가없는 하나 개의 인자 (빈 문자열)로 확장 있는지 확인합니다.

대안은 두 개의 명령을 사용하는 것이다

function do-something 
    if test (count $argv) -lt 2; or test $argv[1] = "--help" 
    echo Usage 
    end 
end 

첫번째 성공하면 제 test 만 실행된다.

+0

네, 다른 프로그래밍 언어에서 나온 것보다 조금 이상하다고 생각했지만, 두 번째 방법으로 할 수 있다고 생각했습니다. 답변 해주셔서 감사합니다! (첫 번째 방법을 선호하십시오.) – Dallas