내 간단한 쉘 조각이 원본과 동일합니까?

내 간단한 쉘 조각이 원본과 동일합니까?

나는 POSIX 쉘 코드를 매년 검토하고 있습니다.

내가 하나 찾았을지도 몰라이상한라인, 나는 전에 그것에 대해 많이 몰랐습니다.

원래

[ $# -eq 3 ] && exit_code=$3 || exit_code=1

새로운 코드 - 더 간단해졌습니다.

exit_code=${3:-1}

이 두 가지 방법은 정확히 동일한 결과를 제공합니까?

어떤 차이점이 있는지 자세히 설명해주실 수 있나요?

답변1

이 두 가지 방법은 서로 다른 논리를 사용하는 것 같습니다.

[ $# -eq 3 ] && exit_code=$3 || exit_code=1

이것은,만약에 그리고 만약에, 위치 인수의 수( )는 $#정확히 3과 동일하고, exit_code변수는 세 번째 위치 인수의 값과 동일하게 설정됩니다. 그렇지 않으면 와 동일하게 설정되어야 합니다 1.

exit_code=${3:-1}

이는 세 번째 위치 인수( 또는 설정되지 않은 경우) exit_code의 값으로 설정됩니다 .1이상세 가지 위치 매개변수.


exit_code요약하자면, 위치 매개변수의 개수가 3개가 아니면 첫 번째 매개변수의 개수는 1로 설정되고, 두 번째 매개변수의 개수는 위치 매개변수의 개수와 관련이 없습니다.

관련 정보