Bourne 쉘: 매개변수 대체의 후행 "-" 연산자

Bourne 쉘: 매개변수 대체의 후행 "-" 연산자

일부 프로세스에 진행률 표시줄을 추가하기 위한 쉘 스크립트를 읽고 있습니다.여기). 이 줄을 이해할 수 없습니다(선택 사항).

#BAR_EXT=${BAR_EXT-}

주석에는 이것이 각 파일에 확장명을 추가할 것이라고 나와 있습니다. 어쩌면 더 읽어야 할 수도 있지만 - 연산자의 사용법에 익숙하지 않습니다.

나는 다음과 같은 대안을 알고 있습니다.배쉬 참조 매뉴얼:

${parameter:-word}

위의 내용은 null 값 을 parameter. (적어도 나는 그것을 알고 있다고 생각합니다.)word${parameter-word}

하지만 이 이후에는 아무것도 지정되지 않았 -으며 무슨 일이 일어나고 있는지 잘 모르겠습니다. 이것이 단순히 parameternull 값을 대체합니까 ? 일반적으로 나는 이것을 실제적인 추측으로 받아들이고 계속 읽으려고 합니다. 그러나 언급된 의견은 다음과 같습니다.다음에 추가파일 확장자.

답변1

스크립트에 명령이 포함되어 있습니까 set -u? 이것은 의미한다

매개변수 확장 시 설정되지 않은 변수와 특수 매개변수 "@", "*" 이외의 매개변수는 오류로 처리됩니다. 설정되지 않은 변수나 매개변수에 대해 확장을 시도하면 쉘은 오류 메시지를 인쇄하고 대화형이 아닌 경우 0이 아닌 상태로 종료됩니다.

즉, $BAR_EXT설정되지 않은 경우 다음과 같습니다.

BAR_FILE="$BAR_FILE$BAR_EXT"

실패할 것이다. 주문하다

BAR_EXT=${BAR_EXT-}

$BAR_EXT전혀 정의되지 않은 경우 명시적으로 빈 문자열로 설정되어 이러한 오류를 방지합니다.

답변2

${VARIABLE-}VARIABLE설정된 경우 값으로 확장되고, 그렇지 않으면 빈 문자열로 확장됩니다. 이것은 보통 이성애자들이 $VARIABLE하는 일이다. 그러나 옵션을 선택하면set -u( set -o nounset) on, $VARIABLE변수가 설정되지 않은 경우 오류를 유발하지만 ${VARIABLE-}여전히 빈 문자열을 생성합니다. 따라서 ${VARIABLE-}"변수가 설정되지 않은 경우에도 빈 문자열이 생성되기를 원합니다"를 의미하고, $VARIABLE"변수를 설정하려고 합니다"를 의미하거나 의미할 수 있습니다.

답변3

최신 Bourne Shell 매뉴얼 페이지를 확인하세요.

http://schillix.sourceforge.net/man/man1/bosh.1.html

현재 8페이지에 있는 "매개변수 대체" 섹션을 찾아보세요. 두 페이지 아래에는 가능한 모든 확장을 설명하는 표가 있습니다.

Bourne Shell은 매개변수 대체에서 "-" 이상의 기능을 지원합니다.

관련 정보