sh에는 오류가 표시되지만 bash에는 오류가 표시되지 않는 이유는 무엇입니까?

sh에는 오류가 표시되지만 bash에는 오류가 표시되지 않는 이유는 무엇입니까?

다음 스크립트가 "예기치 않은 연산자" 메시지를 표시 sh하고 bash.

#!/bin/sh
if [ $UID -ne 0 ]
then
        echo "You must be root."
        exit 1
else
        echo "Open sesame."
        exit 0
fi

답변1

모든 쉘이 변수를 정의하는 것은 아닙니다 UID. 이것은 bash 및 zsh 기능일 뿐입니다. 다른 셸에서는 UID이 변수가 정의되지 않으므로 테스트 명령이 [ -ne 0 ]구문 오류로 확장됩니다.

사용자 ID를 얻는 편리한 방법은 다음을 사용하는 것입니다.id유용.

if [ "$(id -u)" -ne 0 ]; then …

관련 정보