이 두 명령의 차이점은 무엇입니까?
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
는 빈 인수, 손상된 리디렉션 또는 execfail
bash 옵션 세트(기본값 아님)입니다. 첫 번째와 두 번째는 여기에 적용되지 않으며 세 번째가 여기에 적용된다는 증거도 없습니다.
답변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
( )의 내용이 에서 빈 인수로 분할되므로 를 호출한 것과 같습니다.$?
1
bash
exit ''