zsh 매개변수 확장 ${1-$PWD}에 숫자가 있는 이유는 무엇입니까?

zsh 매개변수 확장 ${1-$PWD}에 숫자가 있는 이유는 무엇입니까?

현재 스크립트를 기반으로 한 스크립트가 있습니다. 그 사람이 왜 거기 있는지 이해가 안 돼요 typeset result part dir=${1-$PWD}.

그냥 쓰면 같은 결과가 나옵니다 dir=$PWD. 타이포그래피 ${1-$PWD}는 ?dir$PWD

답변1

이것은 중괄호 확장이 아니라 표준 매개변수 확장 연산자(70년대 Bourne 쉘로 거슬러 올라갑니다)입니다.

${1-$PWD}

$1설정되면( $#엄격히 0보다 큰 경우) 빈 문자열까지 (첫 번째 위치 인수)의 값으로 확장되고, $PWD그렇지 않으면 변수의 내용으로 확장됩니다.

달리기:

info zsh 'Parameter Expansion'

더 알아보기.

typesetBourne도 아니고 POSIX도 아니지만 zsh구체적이지도 않습니다. 이는 Korn 쉘(80년대 초반)에서 왔으며 변수의 범위를 현재 함수로 제한하는 데 사용됩니다. 이는 bash및 에도 나타납니다 yash.

달리기:

info zsh typeset

더 알아보기.

답변2

${1-$PWD}쉘 매개변수 확장 모드입니다.

이는 다른 항목(오른쪽에 있는 항목)을 기반으로 기본값으로 확장하는 데 사용됩니다 -. 귀하의 경우에는 다음과 같습니다.

  • 설정하지 않으면 $1확장 프로그램이 $PWD대체됩니다.

  • 그렇지 않은 경우, 즉 $1임의의 값(null 포함)으로 설정된 경우 해당 값은 확장 결과로 사용됩니다.

예:

% echo "Foo${1-$PWD}"   
Foo/home/bar

% set -- Spam

% echo "Foo${1-$PWD}"
FooSpam

답변3

$1값을 테스트하기 위해 before를 사용합니다 $PWD.

관련 정보