간단한 쉘 도구를 작성하던 중, 어떻게 작업을 해야 할지 전혀 모르겠는 구절을 발견했습니다.
[ "$#" -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