Bash에서 함수의 성공/실패 상태를 변수에 할당하는 방법은 무엇입니까?

Bash에서 함수의 성공/실패 상태를 변수에 할당하는 방법은 무엇입니까?

한 가지 방법은 다음과 같습니다.

# 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내용이 포함될 수 있다면 그렇게 하고 싶지 않을 것입니다 .resultrm

$?대신, 위와 같이 값을 저장한 다음 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

관련 정보