내 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
. 방금 이것을 알아냈는데 이것이 단일 위치 매개변수를 변경하는 올바른 방법인지 확실하지 않습니다.