`exit;`와 `exit $?;`의 차이점

`exit;`와 `exit $?;`의 차이점

이 두 명령의 차이점은 무엇입니까?

   exec "$(dirname "$0")/suman-shell";
   exit $?;

그리고

   exec "$(dirname "$0")/suman-shell";
   exit;

$?첫 번째 사례가 중복됩니까?

답변1

스크립트에 몇 가지 결함이 있습니다.

exec "$(dirname "$0")/suman-shell";
exit $?;
  • 첫 번째는 후행 세미콜론이 중복된다는 것입니다. 그들은 무해하지만 아무런 목적도 없습니다. 줄의 끝은 이미 구분 기호이며, 세미콜론은 한 줄에 있는 여러 명령 사이의 구분 기호로 사용됩니다. 이들의 존재는 코드의 가독성을 약간 저하시킵니다.

  • 두 번째 명령은 exit기본적으로 이전 명령의 종료 상태를 반환하므로 $?의도가 명시되어 있지만 설명이 중복됩니다.

  • 세 번째는 exec정상적인 상황에서는 1이 결코 반환되지 않으므로 exit호출이 처음부터 도달되지 않으며 또한 중복된다는 것입니다.

1이 반환되는 유일한 경우 exec는 빈 인수, 손상된 리디렉션 또는 execfailbash 옵션 세트(기본값 아님)입니다. 첫 번째와 두 번째는 여기에 적용되지 않으며 세 번째가 여기에 적용된다는 증거도 없습니다.

답변2

에서 help exit:

N 상태로 쉘을 종료합니다. N이 생략되면 종료 상태는 마지막으로 실행된 명령의 상태입니다.

그렇습니다. 완전히 중복됩니다.

답변3

엄밀히 말하면 숫자가 들어갈 때 exit와 숫자가 들어갈 때의 차이가 있습니다exit $?$IFS인용하는 것을 잊었으므로 $?분할+글로브 연산자를 호출합니다.:

$ bash -c 'IFS=123; false; exit $?'; echo "$?"
bash: line 0: exit: : numeric argument required
2
$ bash -c 'IFS=123; false; exit'; echo "$?"
1
$ bash -c 'IFS=123; false; exit "$?"'; echo "$?"
1
$ bash -c "exit ''"
bash: line 0: exit: : numeric argument required

첫 번째 경우에는 $?인용되지 않기 때문에 단어 분사의 영향을 받습니다. $IFS포함을 사용 하면 1( )의 내용이 에서 빈 인수로 분할되므로 를 호출한 것과 같습니다.$?1bashexit ''

관련 정보