🐟 Fish rocks. I've been using it exclusively for the last year, and I can't imagine giving it up.<p>There seem to be a number of misconceptions, which I will endeavor to address. The first is: "Fish isn't POSIX/bash-compliant, so there are compatibility problems." POSIX non-compliance is a feature, not a disadvantage, of the fish shell. It means there is less legacy baggage and syntactical inconsistency. I can count the number of POSIX/bash compliance-related issues I've had with fish on one hand, all of which were easily dealt with. For example, Vim assumes that your shell is <i>sh</i> compatible, but adding <i>set shell=sh</i> in your .vimrc solves that. The only other significant one for me was virtualenvwrapper, which doesn't support fish. Not a problem: Virtualfish solves that handily: <a href="https://github.com/adambrenecki/virtualfish" rel="nofollow">https://github.com/adambrenecki/virtualfish</a><p>Want to run a bash script? Just run <i>bash fooshnizzle.sh</i>. Want to switch to bash for a moment? Run <i>bash</i> and then <i>exit</i> when you want to switch back to fish. This POSIX-compatibility topic is, in my opinion, much ado about nothing.<p>Another misunderstanding seems to be, "I can do XYZ in bash, but fish doesn't support that." Fish purposefully limits the number of "builtins" -- commands that fish includes by default -- in order to maintain simplicity. For me, that's a feature. When I find that there's something I want to be easier to do in fish, I whip up a tiny function to do it. Not only is that extremely easy to do in fish, but then that command performs precisely the way <i>I</i> want it to. I haven't pushed many of those to my dotfile repository yet, but you can check out some of my fish functions there: <a href="https://github.com/justinmayer/dotfiles/tree/master/fish" rel="nofollow">https://github.com/justinmayer/dotfiles/tree/master/fish</a><p>Fish is fast, the auto-completion is amazingly helpful, and it's intuitive to use without too much configuration. Give it a try. 🐟