한 가지 방법은 다음과 같습니다.
# run a command here, like [[ $A == *"ABC"* ]]
result=$?
if (( result == 0 ))
then
result=true
else
result=false
fi
그러면 다음과 같이 할 수 있습니다.
if $result
then
...
첫 번째 코드 블록을 작성하는 한 줄 방법이 있습니까? C에서는 다음과 같은 작업을 수행할 수 있습니다.
bool result = funct_a() && funk_b()
답변1
cmd && result=true || result=false
답변2
종종 및 를 if
우회하지 않고 명령문에 명령문을 직접 배치할 수 있습니다 . 특히 이런 것 : 심지어 조건부 구조처럼 보입니다.$?
(( .. ))
[[ .. ]]
if [[ $A == *"ABC"* ]]; then
result=true
dosomethinghere
...
또한 을 실행하면 if $result ...
실제로 변수에 포함된 명령이 실행된다는 점에 유의하세요 result
. true
명령으로 실행할 수 있지만 다음과 같은 false
내용이 포함될 수 있다면 그렇게 하고 싶지 않을 것입니다 .result
rm
$?
대신, 위와 같이 값을 저장한 다음 result=$?
필요할 때 if (( result == 0 ))
다른 수준의 할당을 추가하는 대신 또는 를 사용할 수 있습니다.if [[ $result == 0 ]]
result
답변3
다음을 수행할 수 있습니다.
cmd; f result
이 작은 기능의 도움으로:
f () { last="$?"; declare -n ref="$1"; [[ "$last" == 0 ]] && ref=true || ref=false;}
(이 함수를 다음보다 더 적절한 것으로 부를 수 있습니다 f
... 무엇이 더 적절한지 모르겠습니다.) 어쨌든 명령 바로 뒤에 적용해야 하며 from &&
또는 Link가 아닌 세미콜론으로 구분해야 합니다 ||
. 이 함수는 전달된 이름에 대한 참조를 취하고 $
나머지는 분명합니다.
다음은 데모입니다:
$ f () { last="$?"; declare -n ref="$1"; [[ "$last" == 0 ]] && ref=true || ref=false;}
$ true; f result; echo "$result"
true
$ false; f result; echo "$result"
false
더 복잡한 도우미가 필요할 수도 있습니다.
g () { declare -n ref="$1"; shift; "$@" && ref=true || ref=false; }
결과 변수와 명령이 제공되어야 합니다. 나머지는 동일합니다. 여기 g
실제로 작동합니다:
$ g () { declare -n ref="$1"; shift; "$@" && ref=true || ref=false; }
$ g result ls -lt; echo "$result"
total 2488
drwxr-xr-x 6 tomas tomas 4096 Jan 22 11:41 Documents
drwxr-xr-x 2 tomas tomas 4096 Jan 22 11:26 Pictures
...
true
$ g result asdfasdf; echo "$result"
bash: asdfasdf: command not found
false
또는 원하는 경우 f
이름을 유지할 수 있습니다.g