2013-07-27 3 views
15

내가 bash는 사용하고 싶지 :물고기 쉘에서 if 문에 두 조건을 넣을 수 있습니까?

> if true; then echo y; else echo n; fi 
y 
> if false; then echo y; else echo n; fi 
n 
> if false || true; then echo y; else echo n; fi 
y 

지금 물고기와 노력 :

> if true; echo y; else; echo n; end 
y 
> if false; echo y; else; echo n; end 
n 

# Here 'or true' are just two arguments for false 
> if false or true; echo y; else; echo n; end 
n 

# Here 'or true;' is a command inside the if 
> if false; or true; echo y; else; echo n; end 
n 

# Can't use command substitution instead of a command 
> if (false; or true); echo y; else; echo n; end 
fish: Illegal command name “(false; or true)” 

어떻게 내가 if의 두 가지 조건을 가질 수 있습니까?

답변

18

다른 두 가지 접근 방법 :

접근 하나

if begin false; or true; end 
    echo y 
else 
    echo n 
end 

접근이 :

false; or true 
and echo y 
or echo n 
+0

접근 방식 중 하나는 아마 내가 무엇을 찾고 있었다,하지만 방법이 아주 시원하지만, 너무 애매했다. – michelpm

+0

동의 함. 나는 왜 접근 방법 2가 실제로 작동하는지 이해할 수 없다. 설명 할 사람이 있습니까? – clozach

+0

매우 간단합니다 : 조건 1 또는 조건 2 중 하나라도 사실이라면 계속 진행됩니다. 즉, 해당 진술과 진술을 입력하고 함께 평가합니다. 로부터의 결과와 진실이기 때문에 마지막 또는 문장을 실행할 필요가 없습니다. 그러나 조건 1과 조건 2가 모두 음수이면 명령문이 일찍 취소되므로 두 번째 부분을 평가할 필요가 없습니다. 해당 명령문의 결과는 false가되고 따라서 마지막 또는 명령문이 실행됩니다. – terje

2

이 방법은 작동하지만, 못생긴 해킹 : 나는 진심으로 더 나은 답을 희망

> if test (true; and echo y); echo y; else; echo n; end 
y 
> if test (false; and echo y); echo y; else; echo n; end 
n 
> if test (false; or true; and echo y); echo y; else; echo n; end 
y 

.