Would this make sense in the first place? Why not just echo "This does not have a bad exit status"; and eval let x = "something"? (Which works as expected)
I don't use fish, what happens when you do a similar command there?
On the other hand, when I think of those boolean operations (and, not and or) I think of boolean operations. let doesn't return a value, so it wouldn't make sense to use it in this kind of operations. For example, why would you support not let x = "something";? If the idea is to do a conditional... Well, you can just use if. In that sense, I prefer an strong well defined syntax over a flexible one.
I guess this will require solve some question first:
Should and, not and or be just boolean operations or some kind of control flow?
If they should be boolean, but we want to support that syntax, what should be the return value of let or how should they treat that return value?
We should probably implement them as keywords in our shell, because let requires special parsing rules (hence the need for let to be a keyword). Keywords have the highest level of control over their execution.
In the above example, the let command would exit with a SUCCESS exit status, which would thereby continue to print hola. There are cases where a let operation can fail though. For example, the and condition that follows will not execute:
@AgustinCB Look for Statement::Time as an example of how And/Or/Not could be implemented. Their implementation would be similar, but rather than computing times, you'd just execute based on the current exit status stored in the shell.