편집하다

편집하다

값=${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

관련 정보