Ответ 1
Предполагая, что GCC, эта страница руководства говорит, что препроцессор сначала переводит набор символов входящих файлов в так называемый исходный набор символов, который для gcc является UTF-8. Поэтому для файла UTF-8 ничего не происходит. По умолчанию используется набор символов исполнения по умолчанию для строковых констант, и по умолчанию это (опять же, для GCC) UTF-8.
Итак, ваша строка UTF-8 "выживает" и существует в исполняемом файле как куча байтов в кодировке UTF-8.
Терминал также имеет набор символов, и он должен соответствовать, программа C ничего не делает для дальнейшего перевода строк при печати, они просто печатаются так, как они есть, байт для байта. Если терминал не настроен для UTF-8, вы просто получите мусор.
Как я заметил в комментарии, bash не имеет к этому никакого отношения.