2014-12-12 3 views
1
#!/bin/bash 

function logic_test() 
{ 
    left_bracket=$1 
    right_bracket=$2 

    if [[ ($left_bracket || $right_bracket) && ! ($left_bracket && $right_bracket) ]] 
    then 
     errEcho "Input error: insertIntoConfigFile arg1 does not contain matching []." 
    else 
     errEcho "Passed" 
    fi 
} 

logic_test true true 
logic_test true false 
logic_test false true 
logic_test false false 

예상 결과 : 4.3.11에서if/logical XOR bash 버그? XOR의 기능에 따라

Passed 
Input Error 
Input Error 
Passed 

실제 결과는 (1)

Passed 
Passed 
Passed 
Passed 

을 -release 내 XOR 구현의 사소한 무언가를보고 실패하고 있는가, 또는 if 논리 버기? 버그 인 경우 버그를 제출하려면 어떻게해야합니까?

나는 내가

if [[ ($left_bracket && !$right_bracket) || (!$left_bracket && $right_bracket) ]] 

다음 4 개 출력이 될 경우 "입력 오류"

답변

1

당신은 디버깅을 위해 set -xv을 사용할 수를 변경하면이 ... 버그가있을 수 있습니다 생각하고 있어요 . bash는 [[ .. ]]의 내용을 문자열로 해석하고 -n으로 테스트합니다. 그 중 누구도 emtpy가 아니므로 매번 '사실'로 작동합니다.

수정하려면 [[]]을 제거하면됩니다. Bash는 truefalse을 명령으로 올바르게 해석하여 로직에서 종료 코드를 실행합니다.

+0

나는 이것을 4 분 동안 또 다른 답으로 표시 할 수는 없다. 나는 [*]없이 if 문을 가질 수 있는지 전혀 몰랐다. 흥미 롭 군. – asquirrel