이것이 궁금합니다 :
if [ "$first_arg" == "major" ] || [ "$first_arg" == "minor" ]; then
exit 1;
fi
이것과 동일:
if [ "$first_arg" == "major" || "$first_arg" == "minor" ]; then
exit 1;
fi
답변1
그들은 다르다. 사실 [ "$first_arg" == "major" || "$first_arg" == "minor" ]
유효한 표현도 아닙니다.
이는 [
동등한 명령이고 상호 명령 수준에서 실행되는 대체 명령을 test
사용할 수 없기 때문입니다. ||
역사적으로 올바른 대안은 다음과 같이 간주될 수 -o
있지만이제 POSIX에 의해 더 이상 사용되지 않는 것으로 표시되었습니다.1. 다시 작성하는 것이 좋습니다
test "$1" -o "$2"
입력하다
test "$1" || test "$2"
test
및 구성 외에도 정확하게 를 허용하지 않지만 를 허용하는 [
"최신" 테스트 명령이 있습니다 .[[
-o
||
따라서 이들 모두 유효하고 동일합니다.
시험
[[
:if [[ $first_arg == major || $first_arg == minor ]]; then exit 1; fi
두 가지
[[
테스트:if [[ $first_arg == major ]] || [[ $first_arg == minor ]]; then exit 1; fi
두 가지
[
테스트(표준과 동일):if [ "$first_arg" = major ] || [ "$first_arg" = minor ]; then exit 1; fi
$first_arg
[[
단어 분리나 경로 이름 확장이 없기 때문에 내부에 큰따옴표가 필요하지 않습니다 . [
단, 따옴표는 반드시 사용해야 합니다. 인용문 minor
도 의미가 없습니다 major
. 여기뿐만 아니라 함께 test
또는 함께도 [
마찬가지입니다. 그 이유는 단순한 문자열이기 때문입니다.
1. 애플리케이션 사용법을 확인하세요.
답변2
두 표현이 모두 유효하지 않으므로 준동등성이 있습니다 ;-)
이는 비표준 연산자에서만 작동합니다 ==
.[[
일반적으로: test
내장 함수를 사용할 때는 간단한 표현식만 사용하는 것이 좋습니다. 왜냐하면 매개변수 확장이 적용되면 더 큰 표현식이 예측할 수 없는 결과를 초래할 수 있기 때문입니다.
test
이미 쉘에 내장되어 있기 때문에 대략. 35년이 지나면 더 간단한 test
명령을 호출하고 이를 쉘 수준에서 결합하는 것은 더 이상 성능 문제가 아닙니다.