while ! curl my_url; do sleep 0.1; done
curl supostamente sai com um código de saída diferente de zero se houver um erro.
O importante é entender que, no shell, as condições da forma [ ... ] não são uma construção de linguagem especial. [ é um comando e o resto até e incluindo o ] são seus argumentos. Em vez do comando [ , você pode usar qualquer comando, porque cada comando tem um status de saída e a condição será avaliada como verdadeira se o status de saída for zero.