Zsh와 동등한 것은 무엇입니까: ${VAR:=value}

Zsh와 동등한 것은 무엇입니까: ${VAR:=value}

기존 Bourne Shell(sh)에서는 스크립트의 특정 지점에서 변수가 설정되었고 최소한 특정 기본값이 있는지 확인하려는 경우 다음 구성을 사용할 수 있습니다.

: "${VAR:=defaultValue}"

Zsh 스크립트와 동등한 것은 무엇입니까?

감사해요.

편집: 이를 수행하는 Zsh 특정 방법이 있는 경우를 의미합니다. 실제 명령(:)을 실행하는 대신.

Edit2: 올바르게 인용된 매개변수 확장. Stéphane Chazelas의 답변을 참조하십시오.

답변1

실제로,

: ${VAR:=defaultValue}

zsh이는 (이 옵션을 활성화하지 않는다고 가정할 때) 사실이지만 globsubst다른 쉘에서는 그렇지 않습니다. Bourne과 같은 다른 셸에서는 noglob다음 옵션을 활성화하지 않으면 서비스 거부 취약점이 발생합니다.bash/POSIX 쉘에서 변수를 인용하는 것을 잊어버리는 보안 위험.

이 중 당신에게 필요한 것은

: "${VAR:=defaultValue}"

zsh이러한 Bourne 연산자는 실제로 지원되며 일부 자체 연산자도 같은 방식으로 소개됩니다.

  • ${VAR::=value}무조건 value변수에 할당됩니다(그리고 결과로 확장됩니다). zsh이는 다른 매개변수 확장 연산자 또는 플래그와 결합될 수 있기 때문에 유용합니다 .
  • ${:-value}(즉, VAR생략됨)은 로 확장됩니다 value. 다른 연산자와 결합할 때도 유용합니다.

또 다른 옵션은 다음과 같습니다.

VAR=${VAR:-defaultValue}

이것은 zsh 및 기타 모든 Bourne 유사 쉘에서는 괜찮으며 의미를 더 명확하게 전달합니다.

관련 정보