옵션에 따라 확장되도록 bash에서 명령을 확장하는 방법은 무엇입니까?

옵션에 따라 확장되도록 bash에서 명령을 확장하는 방법은 무엇입니까?

나는 읽기 전용으로 간주되어야 하는 많은 콘텐츠가 포함된 git 저장소로 작업을 시작했습니다. 그래서 새로운 브랜치를 던질 때마다:

git checkout -b newBranch

다음 명령이 따라야 합니다.

git update-index --assume-unchanged LARGE_READONLY_DIRECTORY

나는 이것이 나의 새로운 bash 기술을 시험해 볼 수 있는 완벽한 기회라고 생각했기 때문에 쉘에서 내가 해야 할 일은 첫 번째 줄뿐이었고 첫 번째 줄을 실행한 다음 두 번째 줄을 실행했는데 기억이 나지 않습니다. 나는하지 않을 것이다).

제가 하고 싶은 것은 .bashrc에 첫 번째 인수가 "checkout"이고 두 번째 인수가 "-b"인지 확인하는 함수가 있는 것 같습니다. 첫 번째 확인은 쉽지만 -b가 있는지 확인하는 방법을 모르겠습니다.

git() {
    if [[ $1 == 'checkout' ]] && [[$2 == '-b']]; 
            then echo 'yep!';
    fi;

    command git "$@";
}

이렇게 하면 불평이 나온다 [[-b: command not found. 아마도 이것이 논쟁이 아니라 선택이라는 사실이 여기서 중요할 것이다. 후속 명령을 실행할 수 있도록 이 매개변수가 존재하는지 확인하는 방법을 알려주실 수 있는 분이 계십니까?

답변1

[[와 사이에는 공백이 있어야 합니다 $2.

bash는 구문이 아니기 때문에 [[내장 명령(정확히 말하면 키워드)입니다. Bash는 [[end 를 포함한 모든 인수로 실행 됩니다 ]]. [[and 사이에 공백이 없으면 $2bash는 키워드를 보지 않고 [[대신 다음을 보게 됩니다: ( after 로 [[-b확장됨 ) 그런 다음 Bash는 문자열을 명령으로 실행하려고 시도하지만 실패합니다. 자세한 내용은 을 참조하세요 .$2-b[[-bhelp [[

같은 이유로 끝 앞에 공백이 필요합니다 ]].

고정 코드는 다음과 같습니다.

git() {
    if [[ $1 == 'checkout' ]] && [[ $2 == '-b' ]]; 
            then echo 'yep!';
    fi;

    command git "$@";
}

또한보십시오배쉬 트랩그리고배쉬 FAQ. IMO는 bash 스크립팅을 배우는 가장 좋은 방법...또는 너무 많은 일을 하지 않고도 bash 스크립팅을 배우는 가장 좋은 방법입니다.

답변2

[[과 사이에 공백이 없기 때문에 $2구문 분석이 올바르지 않습니다( [[직접 이어지는 확장 $2). 매개변수 사이에 공백이 필요합니다 [[.

[[ $2 == -b ]]

관련 정보