Bash: 변수에 기본값을 할당하는 중 오류가 발생했습니다.

Bash: 변수에 기본값을 할당하는 중 오류가 발생했습니다.

내 bash 스크립트에서:

이것은 작동합니다:

CWD="${1:-${PWD}}"

그러나 다음으로 바꾸면:

CWD="${1:=${PWD}}"

다음 오류가 발생합니다.

line #: $1: cannot assign in this way

${1}에 할당할 수 없는 이유는 무엇입니까?

답변1

Bash 맨페이지에서:

Positional Parameters
    A  positional  parameter  is a parameter denoted by one or more digits,
    other than the single digit 0.  Positional parameters are assigned from
    the  shell's  arguments when it is invoked, and may be reassigned using
    the set builtin command.  Positional parameters may not be assigned  to
    with  assignment statements.  The positional parameters are temporarily
    replaced when a shell function is executed (see FUNCTIONS below).

나중에매개변수 확장

${parameter:=word}
       Assign  Default  Values.   If  parameter  is  unset or null, the
       expansion of word is assigned to parameter.  The value of param‐
       eter  is  then  substituted.   Positional parameters and special
       parameters may not be assigned to in this way.

$1질문과 같이 위치 매개변수에 기본값을 할당하려면 다음을 사용할 수 있습니다.

if [ -n "$1" ]
then
  CWD="$1"
else
  shift 1
  set -- default "$@"
  CWD=default
fi

shift여기서는 및 의 조합을 사용했습니다 set. 방금 이것을 알아냈는데 이것이 단일 위치 매개변수를 변경하는 올바른 방법인지 확실하지 않습니다.

관련 정보