2

논리적 인 사용에 대한 동등성을 입증하려고합니다 & & 및 || 연산자를 'If then else fi'조건으로 변경하고 해당 이해가 올바른지 확인하려고했습니다. 조건 경우 광산 관련, 이것을 고려 & 논리적 &와의 관점에서 작성표현 다음 논리 이외의 경우 && 및 ||

if (flag="$value") then 
function1 (p1) 
rc=$? 
    if ("$rc"=0) then 
    function2 (p2) 
    fi 
elif (flag="$value2") then 
function1 (p1) 
rc=$? 
    if ("$rc"=0) then 
    function2 (p2) 
    fi 
else 
echo "Msg" 
fi 

||

(([ flag = "$value" ] && function1 (p1)) && function2 (p2)) || 
    (([ flag = "$value2" ] && function1 (p2)) && function2 (p2)) || 
    echo "message" 

내 Q의

과 같습니다
  • 위의 방법은 항상 사용할 수 있습니다.
  • 부모가 사용할 수있는 변수가없는 새 셸을() 괄호로 묶은 이야기가있었습니다. 이 연산자를 그룹화하여 우선 순위를 나타내려면 해당 연산자를 그룹화 할 수 있었으면합니다.

@Chepner. 설명을위한 Thx. 그래서 위의

{{ $opte || $optf } ; && [ -n "$s1" ] ; } && echo "error message" 

하고, 따라서이 논리를 번역하는 것처럼 쓸 수있다이

optf=false 
opte=false 
optp=false 

case $opt in 

    p) ... 
    (($opte || $optf) && [ -n "$s1" ]) && echo "error message" 

처럼 보이는 경우 문 : 당신은 p 옵션 발생할 때 확인하세요 opte 또는 optf 사실입니다. 둘 중 하나가 true이고 s1에 대한 값이 있으면 오류 메시지를 던집니다. 그럴 건가요, 아니면 아직 막아야 할 구멍이 있습니다. Gotcha- 나는 ";" . {}; - 나는 내 운영자들을 클럽에 동원시켜야한다.

if command1; then 
    command2 
else 
    command3 
fi 
command1 && command2 || command3

이 일치하지 않는 것을

+0

어떤 셸입니까? – anubhava

+0

유효한 쉘로 시작하십시오. 당신의'if ... else' 문은 그렇지 않습니다. – chepner

+0

안녕하세요.그것의 KSH – user1874594

답변

4

참고. command1이 실패하면

  • command2는 건너 뛰고 command3 실행은 예상대로.
  • command1이 성공하고 command2이 실행되면 이 실행되고이 성공하면 command3은 예상대로 건너 뜁니다.
  • command1이 성공하면
  • command2if 문에서 차이가있는 command3이 실행될, 를 실행하고 실패합니다. command1가 성공하면 실행되지 않습니다 command3 있도록 관계없이 command2의 성공, &&에 오른쪽 피연산자를 강제
    command1 && { command2; true; } || command3 
    

    이 성공하기 :

당신은 같은 것을 사용해야합니다 .

+0

Thx. 변수를 사용할 수없는 새 셸을 생성 할 때 연산자 우선 순위를 지정하는 데 사용되는 대괄호() 괄호 효과에 메모를 추가 할 수 있습니까? – user1874594

+0

서브 쉘을 생성하지 않고 동일한 효과를 내기 위해'{...} '를 사용할 수 있습니다. '()'내부의 변수에 대한 변경은 서브 쉘 밖에서는 유지되지 않지만'{} '내부에서의 변경은 보존됩니다. – chepner

+0

질문을 명확하게 업데이트했습니다. 위의 내용이 올바른지 확인하십시오. Thx의 이득 – user1874594