Bash 쉘 스크립트에서 매개변수 위치 옆에 있는 하이픈은 무엇을 합니까? 좋아요${1-}

Bash 쉘 스크립트에서 매개변수 위치 옆에 있는 하이픈은 무엇을 합니까? 좋아요${1-}

이 코드를 발견했습니다여기:

#!/bin/bash

# ...

if [[ "${1-}" =~ ^-*h(elp)?$ ]]; then
    echo "Usage..."
    exit
fi

-h인수가 전달될 때(예 : , --help, , ) -help사용 정보를 인쇄하는 것이 무엇인지 알고 있습니다 .-------help

하지만 왜 "${1-}"뿐만 아니라 "${1}"? 하이픈은 무엇을 합니까?

처음에는 이것이 위치 1부터 시작하는 모든 주장을 의미할 수 있다고 생각했습니다. 그렇게 해봤는데 아니, 그렇지 않네요.

그러다가 오타일지도 모른다고 생각했고 작성자는 "${1-9}"모든 숫자 위치를 허용하려고 했습니다. 다시 말하지만 작동하지 않으며 유효한 코드도 아닙니다.

답변1

매개변수 확장의 하이픈을 사용하면 기본값을 지정할 수 있습니다.. 따라서 ${1-}"설정된 경우 첫 번째 인수의 값, 그렇지 않으면 빈 문자열"을 의미합니다.

설정되지 않은 변수는 어쨌든 빈 문자열로 확장되므로 이는 특히 유용하지 않은 것 같습니다. 그러나 활성화하고 인수가 제공되지 않으면 ${1}대신 오류가 발생합니다. 따라서 일부 쉘 프로그래머는 합법적으로 설정되지 않은 변수를 참조할 때 항상 이 형식을 사용합니다.set -u${1-}

이 항목을 찾은 웹사이트의 맥락에서 이는 "thing" 번호 5와 일치합니다.

  1. .you 사용을 선호합니다 set -o nounset.가능한이렇게 하지 않는 데에는 충분한 이유가 있지만, 항상 설정해 두는 것이 가장 좋다고 생각합니다.

    • 이로 인해 설정되지 않은 변수에 액세스하면 스크립트가 실패하게 됩니다. 변수 이름의 철자 오류로 인해 의도치 않은 끔찍한 결과가 발생하지 않도록 하세요.
    • 설정되었거나 설정되지 않은 변수에 액세스하려면 "${VARNAME-}"대신 사용 "$VARNAME"하면 됩니다.

관련 정보