조건 && 명령 + 종료

조건 && 명령 + 종료

간단한 쉘 도구를 작성하던 중, 어떻게 작업을 해야 할지 전혀 모르겠는 구절을 발견했습니다.

  [ "$#" -ne 3 ] || echo "wrong number of arguments" && exit

에코가 실패할 수 있는 상황을 상상하기 어렵기 때문에 위의 내용은 예상대로 작동합니다. 하지만 echo를 실패할 수 있지만 여전히 실행되는 명령으로 바꾸면 어떻게 될까요 exit?

기본 쉘이 아닌 exit생성된 쉘이 종료되기 때문에 작동하지 않습니다 .( )

  [ "$#" -ne 3 ] && ( command ; exit )

이는 항상 종료됩니다.

  [ "$#" -ne 3 ] && command ; exit 

자세한 구문을 사용할 수 있습니다.

 if [ "$#" -ne 3 ] ; then 
      command 
      exit
 fi

그러나 내가 관여하고 싶지 않고 if구문을 단순하게 유지하려면 어떻게 exit이와 같은 문자열 명령의 조건부 실행을 포함할 수 있습니까?

답변1

중괄호 안에 명령을 그룹화할 수 있습니다.

[ "$#" -ne 3 ] || { command; exit; }

{ list; }나열된 명령이 하위 쉘이 아닌 현재 쉘의 컨텍스트에서 실행되도록 합니다.

자세히 알아보기bash 그룹화 명령

답변2

이 시도

f() { [ "$#" -ne 3 ] && { command ; exit; }; }; f 1 2 3

그 다음에

f() { [ "$#" -ne 3 ] && { command ; exit; }; }; f 1 2

관련 정보