I've browsed a bit throught the other posts and it seems like there is no clear explanation of the nuance of "V + ざるを得ない" compared to "V + しかない". Roughly speaking, they have the same meaning but is there any subtle nuance I don't get here or are they completely interchangeable?
(せ)ざるを得ない looks a little more literary, stiff and formal, although it can safely be used in informal but serious situations. It clearly expresses that the verb is an undesirable but unavoidable option. In other words, you do not want to do it but cannot help it. ざる is an archaic negation marker, and 得る has a potential meaning. ざるを得ない is one of the set phrases that use archaic forms.
On the other hand, (する)しかない is fairly neutral ("one can only ～"). It's usually interchangeable with ざるを得ない, but it does not necessarily imply the verb is an undesirable option. For example, you can safely use しかない when you noticed you had only one option but it was your initial plan, anyway.
- 戦わざるを得ない！ (strongly implies you are reluctant but had no choice)
- 戦うしかない！ (more proactive, "I must fight!")
According to the Dictionary of Intermediate Japanese Grammar,
Vneg ざるを得ない can also be replaced by ... V しかない.... Both Vneg ざるを得ない and V しかない are used only in a no-choice situation [and not in an obligation situation].
Here, Vneg means the negative stem (未然形) of a verb (i.e. 買わ for 買う, 読ま for 読む) and V means the dictionary form of the verb.