기존 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 유사 쉘에서는 괜찮으며 의미를 더 명확하게 전달합니다.