if 문에서 일치하는 매개변수를 확인하는 데 걸리는 시간 단축

if 문에서 일치하는 매개변수를 확인하는 데 걸리는 시간 단축

해야 할 일을 수행하는 코드 조각이 있습니다.

first_arg="$1";
if [ "$first_arg" != "patch" -a "$first_arg" != "major" -a "$first_arg" != "minor" -a "$first_arg" != "prerelease" ]; then
  echo "First argument needs to match a valid npm version argument (patch, minor, major, etc).";
  exit 1;
fi

첫 번째 매개변수가 (패치, 메이저, 마이너, 프리릴리즈) 중 하나인지 확인합니다.

그러나 이 작업을 수행하는 더 짧고 간결한 방법이 있습니까?

답변1

을 사용할 수 있으며 case모든 표준 쉘에서 작동합니다.

case "$1" in
    patch|major|minor|prerelease) ;;
    *) echo "First argument needs to match a valid npm version argument (patch, minor, major, etc)." >&2; exit 1;;
esac

Bash/ksh/zsh의 대안은 정규식 일치를 사용하는 것입니다.

if ! [[ $1 =~ ^(patch|major|minor|prerelease)$ ]]; then
    echo "First argument needs to match a valid npm version argument (patch, minor, major, etc)." >&2;
    exit 1;
fi

관련 정보