Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

In fish shell, how can I put two conditions in an if statement?

What I want to do using bash:

> 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

Now trying with fish:

> 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)”

How can I have two conditions in an if?

like image 932
michelpm Avatar asked Jul 27 '13 16:07

michelpm


2 Answers

Two other approaches:

Approach one:

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

Approach two:

false; or true
and echo y
or echo n
like image 179
terje Avatar answered Oct 19 '22 13:10

terje


This way works, but it is an ugly hack:

> 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

I sincerely hope for better answers.

like image 21
michelpm Avatar answered Oct 19 '22 12:10

michelpm