이런 식으로 할 수있는 방법이 있습니까
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
값을 할당하고 , 그렇지 않으면 기본값을 할당합니다 . 이것은 표현식의 결과 일 수도 있습니다.VAR
VAR
20
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;
당연히 이것은 변수 할당에만 작동합니다. 다른 명령을 실행할 수 없습니다.