bash - VAR=${[number]:-default}를 사용하여 변수를 정의합니다.

bash - VAR=${[number]:-default}를 사용하여 변수를 정의합니다.

나는 다음과 같은 스크립트를 발견했습니다.

VAR1=${1:-8}

VAR2=${2:-4}

나는부터 볼 수 있다기타 질문그리고 일부 코드를 사용

VAR1=${VAR2:-8}

VAR1어떤 값 VAR2이라도 생성됩니다 . VAR2설정하지 않으면 기본값 VAR1은 8이며 VAR2설정되지 않은 상태로 유지됩니다. 즉, echo VAR2이 명령을 실행한 후에는 아무것도 반환되지 않습니다.

제 질문은 코드의 첫 번째 줄이 무엇을 하는지 입니다. 변수 이름은 숫자로 시작할 수 없으므로 VAR1분명히 1이나 1이라는 변수로 설정되지 않습니다. 여기에는 이유가 있을 텐데, 그저 약간의 무의미한 혼란은 아니지 않을까요?

답변1

${1:-8}sum에 사용되는 변수는 ${2:-4}위치 매개변수 $1sum 입니다 $2. 명령줄에서 스크립트(또는 셸 함수)에 전달된 값을 보유합니다. 설정되지 않았거나 비어 있는 경우 언급한 변수 대체는 각각 기본값 8과 4를 사용합니다.

이는 (적어도) 두 개의 명령줄 인수가 필요하고 아무것도 제공되지 않은 경우 기본값을 제공하려는 쉘 스크립트 또는 쉘 함수에서 사용될 수 있습니다.

스크립트 또는 셸 함수는 여러 개의 인수를 사용할 수 있으며 이러한 인수는 스크립트 또는 함수 내에서 , ...를 사용하여 $1참조할 수 있습니다 . $29 이상의 위치 매개변수 값을 얻으려면 ${10}다음과 같이 작성해야 합니다.${11}

이 경우 또 다른 유용한 변수 대체는 설정되지 않은 경우 오류로 ${parameter:?word}표시되고 스크립트가 종료된다는 것입니다.wordparameter

$ cat script.sh
#!/bin/bash
var1="${1:?Must provide command line argument}"
printf 'I got "%s"\n' "$var1"
$ ./script.sh
script.sh: line 3: 1: Must provide command line argument
$ ./script.sh "Hello world."
I got "Hello world."

답변2

위치 매개변수 를 나타냅니다 $1 ... $n.

${1:-default}"매개변수 1이 설정되지 않았거나 비어 있는 경우 사용 default"을 의미합니다.

참고: ${1:-2}와 혼동 하지 마십시오 ${1: -2}. bash의 경우 후자는 의 마지막 두 문자로 대체됩니다 $1.

예:

$ set --
$ echo "${1:-2}"
2

$ set 345 678
$ echo "${1:-2}"
345

$ echo "${1: -2}"
45

관련 정보