환경 변수에 따른 조건부 할당


11

bash 스크립트에서 값이 외부 전역 환경 변수 ( $MYAPP_ENV) 에 의존하도록 로컬 변수를 할당합니다 .

if [ "$MYAPP_ENV" == "PROD" ]
then
    SERVER_LOGIN=foobar123@prod.example.com
else
    SERVER_LOGIN=foobar987@test.example.com
fi

위 과제를 작성하는 더 짧은 (아직 깨끗한) 방법이 있습니까? (아마 일종의 조건부 연산자 / 인라인 경우 사용)

답변:


17

케이스 / 스위치를 사용 bash하여이를 수행 할 수도 있습니다 .

case "$MYAPP_ENV" in
 PROD) SERVER_LOGIN="foobar123@prod.example.com" ;;
    *) SERVER_LOGIN="foobar987@test.example.com" ;;
esac

또는이 방법 :

[ "$MYAPP_ENV" = PROD ] &&
   SERVER_LOGIN=foobar123@prod.example.com ||
   SERVER_LOGIN=foobar987@test.example.com

2
case 문은 한 줄에 모두 넣는 것보다 훨씬 읽기 쉽습니다 (두 번째 명령이 실패 할 경우 재앙으로 끝날 수 있음) 이 같은 경우를 처리 할 때 가장 좋은 방법입니다.
Chris Down

@Jonik-문제가 해결되었다는 것을 다른 사람들이 알 수 있도록 요구 사항을 충족하는 경우 답변 중 하나를 수락하십시오. 감사.
slm

내가 찾던 것과 정확히 일치하지 않더라도 사례 진술이 제시된 옵션 중 가장 깨끗하다고 ​​생각합니다. Bash 구문은 어색합니다. :)
Jonik

1
@Jonik-그것은 나의 발견이기도합니다. 나는 대안을 찾았고, 긴 프로그램보다는 많은 일을하는 넓은 라인을 선호하며, if / then / else도 내 취향에 대해 매우 장황하다.
slm

9

시험:

[ condition ] && var=value_when_true || var=value_when_false

과제가 숫자이면 bash삼항 연산을 사용할 수 있습니다 .

(( assign_condition ? value_when_true : value_when_false ))

1
전자는 삼항이 아니다. true && false || echo "if this was ternary, this wouldn't be executed"
Chris Down

@ chris-사실이지만 용어가 옳지 않은 경우에도 여전히 실용적인 대답입니다.
cas

@CraigSanders 용어가 중요합니다. 두 번째 명령이 실패 할 때 스크립트에서이 방법이 너무 자주 사용됩니다.
Chris Down

@ChrisDown : 답변을 편집하십시오. 지금은 나아 졌습니까?
cuonglm

1
cuonglm의 편집에 필요한 2.5 년 동안의 Lol!
iruvar

4

&&||연산자를 사용할 수 있습니다

[ "$MYAPP_ENV" == "PROD" ] && SERVER_LOGIN=foobar123@prod.example.com || SERVER_LOGIN=foobar987@test.example.com
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.