echo
помещает пробел между каждыми двумя аргументами. Оболочка считает новую строку в $ num
просто разделителем слов (как и пробел).
lines="a
b
c"
set -x
echo $lines # several arguments to echo
echo "$lines" # one argument to echo
См. этот ответ (сам ОП) для более подробного объяснения.
Это продиктовано конфигурацией NSS (Name Service Switch ), то есть директивой hosts
файла /etc/nsswitch.conf
. Например, в моей системе:
hosts: files mdns4_minimal [NOTFOUND=return] dns
Здесь files
относится к файлу /etc/hosts
, а dns
относится к системе DNS. И, как вы понимаете, побеждает тот, кто придет первым.
Также см. man 5 nsswitch.conf
, чтобы получить больше информации об этом.
Кроме того, чтобы следовать порядку разрешения узлов NSS, используйте getent
с hosts
в качестве базы данных, например.:
getent hosts example.com
Чтобы ответить только на ваш последний вопрос,:/etc/hosts
не применяется сразу же, потому что firefox
кэширует последнее имя хоста, полученное для google.com
; если вы хотите, чтобы он всегда получал его снова, вам нужно установитьnetwork.dnsCacheExpiration
на 0
в about:config
. Дополнительная информация (хотя и немного устарела)здесь . Извините, если это оффтоп.
Кстати, многие программы не используют стандартный преобразователь (getaddrinfo(3)
, getnameinfo(3)
[1] ), потому что он отстой .
Во-первых, интерфейс не является асинхронным; любой умеренно сложной программе придется создавать отдельный поток, выполняющий только getaddrinfo()
, а затем изобретать собственный протокол для связи с ним (и даже не входить в getaddrinfo_a()
, который отправляет сигнал . ] по завершению, так что это еще хуже ).
Во-вторых, реализация резолвера вglibc
(стандартной библиотеке C в linux )ужасна, ожидая, что вы позволите ему загружать случайные динамические объекты в адресное пространство через dlopen()
за вашей спиной, и делает невозможным содержать его каким-либо образом или использовать в статически связанных исполняемых файлах.
Поскольку многие программы не используют стандартный распознаватель напрямую, они также не заботятся о точном воспроизведении его поведения и игнорируют некоторые или все /etc/resolv.conf
, /etc/hosts
, /etc/nsswitch.conf
или /etc/gai.conf
.
[1] и даже не упоминайте нереентерабельный -, только ipv4 -gethostbyname()
, который устарел с незапамятных времен.