값=${VAR|
쉘 스크립트에서 이 변수 할당을 찾았습니다. 여기서 || 기호가 사용되는 이유를 이해할 수 없습니다.
편집하다
주어진 코드코멘트:
#!/bin/bash
source /opt/cpf/bin/cpf_logging_helper.sh
STATE=$1
DNS_MASTER=${TEST.DNS.DNS_MASTER:-o}
service status dns > /dev/null
rval=$?
if [ $rval -eq 0 ]
then
if [ $DNS_MASTER == `hostname -s` ]
then
echo "1"
else
echo "2"
fi
fi
답변1
원래 인코더는 값이 설정되지 않은 경우 $VAR
해당 값을 사용하도록 의도된 것으로 보입니다 . o
이는 bash
다음 방법을 사용하여 달성할 수 있습니다.
VALUE=${VAR:-o}
또한 참조 man bash
하고 검색 Parameter Expansion
하거나:-
답변2
이 구조는 VALUE=${VAR| |o}
dash, bash, ksh 및 zsh에서는 유효하지 않습니다.
만약에이것은 | |
실제로 / /
bash에서 의미가 있는(?) then입니다.
즉, 첫 번째 공백을 로 바꿉니다
o
.
이것이 합리적인 교체인지 여부는 또 다른 문제입니다. 나는 그것이 사실이라고 믿지 않습니다.
편집 시 추가된 코드에서 점은 dash, bash 또는 zsh의 변수 이름이나 ksh의 매우 특정한 조건에서 유효하지 않습니다.
bash에서는 실패합니다.
DNS_MASTER=${TEST.DNS.DNS_MASTER:-o}
또한 이 테스트는 공백과 호스트 이름 명령이 실행되지 않는다는 사실로 인해 올바르지 않습니다.
if [ $DNS_MASTER == hostname -s ]
사용:
if [ "$DNS_MASTER" == "$(hostname -s)" ]
요약하자면, 제공한 코드는 bash에서 제대로 작동하지 않으며 대부분의 셸에서 혼란스럽습니다. 관련성이 있도록 질문을 편집하십시오.
답변3
내가 생각할 수 있는 가장 가까운 쉘 연산자는 다음과 같습니다.배쉬 패치William Park는 2004년부터 2008년까지 이 버전을 유지 관리했으며, 여기에는 bash3에 대한 다소 유용한 확장 기능이 포함되어 있습니다.
A 시리즈가 있어요매개변수 확장 연산자모든 것은 ${var|...}
이러한 연상되는 zsh
매개변수 플래그 중 일부로 시작됩니다(구문은 완전히 다르지만).
해당 셸에서 는 , (와 거의 동일 ) ${var| |o}
로 구문 분석되지만 유효한 명령 이름으로 간주되지 않기 때문에 오류가 발생합니다 (해당 이름으로 명령을 생성한 경우에도 마찬가지).${var|cmd}
$(cmd "$var"}
invalid command
|o