[bash] Bash의 삼항 연산자 (? :)

이런 식으로 할 수있는 방법이 있습니까

int a = (b == 5) ? c : d;

배쉬를 사용합니까?



답변

삼항 연산자 ? :if/else

case "$b" in
 5) a=$c ;;
 *) a=$d ;;
esac

또는

 [[ $b = 5 ]] && a="$c" || a="$d"


답변

암호:

a=$([ "$b" == 5 ] && echo "$c" || echo "$d")


답변

조건이 단순히 변수가 설정되어 있는지 확인하는 경우 더 짧은 형식이 있습니다.

a=${VAR:-20}

if 가 설정 되면 a값을 할당하고 , 그렇지 않으면 기본값을 할당합니다 . 이것은 표현식의 결과 일 수도 있습니다.VARVAR20

alex가 주석에서 언급 한 것처럼이 방법을 기술적으로 “매개 변수 확장”이라고합니다.


답변

if [ "$b" -eq 5 ]; then a="$c"; else a="$d"; fi

cond && op1 || op2다른 답변에서 제안 표현은 고유의 버그가 다음과 같은 경우 op1제로가 아닌 종료 상태가, op2자동으로 결과가된다; -e모드 에서도 오류가 발생하지 않습니다 . 그래서, 그 표현은 경우에 사용하는 유일한 안전 op1하지 않을 수 있습니다 (예를 들어 :, true분열과 OS 호출)처럼 (실패 할 수있는 모든 작업없이 내장, 또는 변수 할당하는 경우).

""따옴표를 참고하십시오 . 첫 번째 쌍 $b은 공백이거나 공백이있는 경우 구문 오류를 방지합니다 . 다른 것들은 모든 공백이 단일 공백으로 변환되는 것을 막을 것입니다.


답변

(( a = b==5 ? c : d )) # string + numeric


답변

[ $b == 5 ] && { a=$c; true; } || a=$d

이렇게하면 || 다음 부분을 실행하지 않아도됩니다. &&와 || 사이의 코드가 실수로 우연히 실패합니다.


답변

하자의 명령에서 지원하는 대부분의 사람이 필요 기본 연산자 :

let a=b==5?c:d;

당연히 이것은 변수 할당에만 작동합니다. 다른 명령을 실행할 수 없습니다.