A mensagem "A rede não está acessível" é impressa em stderr , não em stdout , por isso não é capturada pela sua substituição ( $(ping ...) ). Você precisa redirecionar stderr para stdout ao executar ping , não quando você registra:
print_and_log "$(ping -c10 "$i" 2>&1)"