Bem ... eu me sinto idiota. Mas vou responder a esta pergunta para qualquer outra pessoa que tenha o mesmo problema.
Desde que eu estou desenvolvendo em um computador Windows, ele está usando finais de linha CRLF. Eu uso o Sublime Text e nunca penso em finais de linha porque estou sempre desenvolvendo para o Windows.
Mas, é claro, os scripts bash precisam usar finais de linha LF, ou coisas estranhas acontecem. Eu não poderia dizer por que isso permite que echo
de comandos sejam executados e não if...fi
, mas quando eu mudei meus finais de linha para LF, tudo funcionou como você esperaria.