나는 읽기 전용으로 간주되어야 하는 많은 콘텐츠가 포함된 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 사이에 공백이 없으면 $2
bash는 키워드를 보지 않고 [[
대신 다음을 보게 됩니다: ( after 로 [[-b
확장됨 ) 그런 다음 Bash는 문자열을 명령으로 실행하려고 시도하지만 실패합니다. 자세한 내용은 을 참조하세요 .$2
-b
[[-b
help [[
같은 이유로 끝 앞에 공백이 필요합니다 ]]
.
고정 코드는 다음과 같습니다.
git() {
if [[ $1 == 'checkout' ]] && [[ $2 == '-b' ]];
then echo 'yep!';
fi;
command git "$@";
}
또한보십시오배쉬 트랩그리고배쉬 FAQ. IMO는 bash 스크립팅을 배우는 가장 좋은 방법...또는 너무 많은 일을 하지 않고도 bash 스크립팅을 배우는 가장 좋은 방법입니다.
답변2
[[
과 사이에 공백이 없기 때문에 $2
구문 분석이 올바르지 않습니다( [[
직접 이어지는 확장 $2
). 매개변수 사이에 공백이 필요합니다 [[
.
[[ $2 == -b ]]