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
값 이 할당되고 , 그렇지 않으면 기본값이 할당됩니다 . 이는 표현식의 결과 일 수도 있습니다.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;
당연히 이것은 변수 할당에만 작동합니다. 다른 명령을 실행할 수 없습니다.
다음은 한 번만 할당 할 변수를 지정해야하는 또 다른 옵션이며 할당이 문자열인지 숫자인지는 중요하지 않습니다.
VARIABLE=`[ test ] && echo VALUE_A || echo VALUE_B`
그냥 생각이야 :)
다음은 내 사용 사례에서 작동하는 것 같습니다.
예
$ tern 1 YES NO
YES
$ tern 0 YES NO
NO
$ tern 52 YES NO
YES
$ tern 52 YES NO 52
NO
다음과 같이 스크립트에서 사용할 수 있습니다.
RESULT=$(tern 1 YES NO)
echo "The result is $RESULT"
세 개 한 세트
function show_help()
{
echo ""
echo "usage: BOOLEAN VALUE_IF_TRUE VALUE_IF_FALSE {FALSE_VALUE}"
echo ""
echo "e.g. "
echo ""
echo "tern 1 YES NO => YES"
echo "tern 0 YES NO => NO"
echo "tern "" YES NO => NO"
echo "tern "ANY STRING THAT ISNT 1" YES NO => NO"
echo "ME=$(tern 0 YES NO) => ME contains NO"
echo ""
exit
}
if [ "$1" == "help" ]
then
show_help
fi
if [ -z "$3" ]
then
show_help
fi
# Set a default value for what is "false" -> 0
FALSE_VALUE=${4:-0}
function main
{
if [ "$1" == "$FALSE_VALUE" ]; then
echo $3
exit;
fi;
echo $2
}
main "$1" "$2" "$3"
삼항 연산자를 위해 Shell Scripting에서 다음 세 가지 방법을 사용할 수 있습니다.
[ $numVar == numVal ] && resVar="Yop" || resVar="Nop"
Or
resVar=$([ $numVar == numVal ] && echo "Yop" || echo "Nop")
Or
(( numVar == numVal ? (resVar=1) : (resVar=0) ))
(ping -c1 localhost&>/dev/null) && { echo "true"; } || { echo "false"; }
비슷한 문법을 원한다면 이것을 사용할 수 있습니다
a=$(( $((b==5)) ? c : d ))
bash에는 삼항 조건에 대해 매우 유사한 구문이 있습니다.
a=$(( b == 5 ? 123 : 321 ))
불행히도, 내가 아는 한 숫자로만 작동합니다.
몇 가지 옵션이 있습니다.
1- 그렇다면 한 줄로 사용하면 가능합니다.
if [[ "$2" == "raiz" ]] || [[ "$2" == '.' ]]; then pasta=''; else pasta="$2"; fi
2- 다음과 같은 함수를 작성하십시오.
# Once upon a time, there was an 'iif' function in MS VB ...
function iif(){
# Echoes $2 if 1,banana,true,etc and $3 if false,null,0,''
case $1 in ''|false|FALSE|null|NULL|0) echo $3;;*) echo $2;;esac
}
이와 같이 스크립트 내부에서 사용하십시오
result=`iif "$expr" 'yes' 'no'`
# or even interpolating:
result=`iif "$expr" "positive" "negative, because $1 is not true"`
3- 대답에서 영감을 얻은,보다 유연하고 한 줄 사용은 다음과 같습니다.
case "$expr" in ''|false|FALSE|null|NULL|0) echo "no...$expr";;*) echo "yep $expr";;esac
# Expression can be something like:
expr=`expr "$var1" '>' "$var2"`
이것은 Vladimir의 훌륭한 답변 과 매우 유사 합니다. "삼항"이 "true, string, false, empty"인 경우 간단하게 수행 할 수 있습니다.
$ c="it was five"
$ b=3
$ a="$([[ $b -eq 5 ]] && echo "$c")"
$ echo $a
$ b=5
$ a="$([[ $b -eq 5 ]] && echo "$c")"
$ echo $a
it was five
참고 URL : https://stackoverflow.com/questions/3953645/ternary-operator-in-bash
'Programing' 카테고리의 다른 글
'make install'의 반대말은 무엇입니까, 즉 Linux에서 라이브러리를 어떻게 제거합니까? (0) | 2020.02.27 |
---|---|
스프링 : @Component 대 @Bean (0) | 2020.02.27 |
파이썬에서 문자열에서 숫자를 추출하는 방법은 무엇입니까? (0) | 2020.02.27 |
스위프트의 정밀 문자열 형식 지정자 (0) | 2020.02.27 |
WCF와 ASMX 웹 서비스의 차이점은 무엇입니까? (0) | 2020.02.27 |