부울 값 선언의 약어

부울 값 선언의 약어

다음과 같이 부울 값을 선언하는 방법을 찾고 있습니다.

HOME_IS_BASE_DIR=$("home" == "${BASE_DIRECTORY}")    // boolean
USERS_IS_BASE_DIR=$("Users" == "${BASE_DIRECTORY}")   // boolean

물론 위의 방법은 작동하지 않으며 오류가 발생합니다.

bash는 홈 명령을 찾을 수 없습니다

bash는 사용자 명령을 찾을 수 없습니다

이를 수행하는 먼 길은 다음과 같습니다.

HOME_IS_BASE_DIR=false;
USERS_IS_BASE_DIR=false;

if [ "home" == "${BASE_DIRECTORY}" ]; then
  HOME_IS_BASE_DIR=true;
else if [  "Users" == "${BASE_DIRECTORY}" ]; then
  USERS_IS_BASE_DIR=true;
fi

이것에 대한 약어가 있나요?

답변1

보다 간결한 표현은 다음과 같이 달성될 수 있습니다.

#!/bin/sh         
BASE_DIRECTORY="home";
[ "home" = "$BASE_DIRECTORY" ] && HOME_IS_BASE_DIR=true || HOME_IS_BASE_DIR=false;
echo $HOME_IS_BASE_DIR;

답변2

case ${BASE_DIRECTORY} in
    "home")
        HOME_IS_BASE_DIR=true
        USERS_IS_BASE_DIR=false
        ;;
    "Users")
        HOME_IS_BASE_DIR=false
        USERS_IS_BASE_DIR=true
        ;;
    *)
        # Handle heretofore unhandled values here
        ;;
esac

정확하게 단축된 것은 아니지만 현재 수행 중인 작업에 대해 매우 명확하고 다른 위치로 쉽게 확장할 수 있습니다. 그러나 이러한 추가 변수를 사용하는 대신 ${BASE_DIRECTORY}를 살펴보는 것은 어떨까요?

답변3

다음과 같은 것을 요청하셨습니다.

HOME_IS_BASE_DIR=$("home" == "${BASE_DIRECTORY}")
USERS_IS_BASE_DIR=$("Users" == "${BASE_DIRECTORY}")

테스트를 함수로 전환할 수 있습니다.

HOME_IS_BASE_DIR()  { [[ "home"  == "${BASE_DIRECTORY}" ]]; }
USERS_IS_BASE_DIR() { [[ "Users" == "${BASE_DIRECTORY}" ]]; }

그런 다음 다음과 같은 테스트를 수행할 수 있습니다.


BASE_DIRECTORY="/"

if HOME_IS_BASE_DIR        ; then echo "home is base dir"    ; fi
if ! HOME_IS_BASE_DIR      ; then echo "home is NOT base dir"; fi

if ! HOME_IS_BASE_DIR && \
   ! USERS_IS_BASE_DIR     ; then echo "neither is base dir" ; fi

# output of above:
# home is NOT base dir
# neither is base dir

# ...or use &&/|| instead of 'if':
BASE_DIRECTORY="Users"
USERS_IS_BASE_DIR && echo "Users is base dir"
HOME_IS_BASE_DIR  || echo "home is NOT base dir"

# output of above:
# Users is base dir
# home is NOT base dir

위 코드는 bash 및 zsh에서 작동하며 dash/POSIX에 쉽게 적용할 수 있습니다.

설명하다

쉘 스크립트에서는 종료 코드( ) 등에 대한 부울 표현식을 작성하는 것이 일반적입니다 cmd1 && cmdd. 이 두 함수는 의 테스트에 해당하는 종료 코드를 생성하므로 [[ .. ]]함수에 대한 부울 표현식을 구성할 수 있습니다.

함수는 테스트가 완료될 때마다 평가되므로 함수 BASE_DIRECTORY가 변경되면 및 를 사용한 테스트 결과도 HOME_IS_BASE_DIR변경 됩니다 USERS_IS_BASE_DIR.

관련 정보