Программа hostname
выполняет системный вызов uname, как видно из запуска:
strace hostname
...
uname({sysname="Linux", nodename="my.hostname.com",...}) = 0
...
На справочной странице системного вызова uname говорится, что системный вызов извлекает из ядра следующую структуру:
struct utsname {
char sysname[]; /* Operating system name (e.g., "Linux") */
char nodename[]; /* Name within "some implementation-defined
network" */
char release[]; /* Operating system release (e.g., "2.6.28") */
char version[]; /* Operating system version */
char machine[]; /* Hardware identifier */
#ifdef _GNU_SOURCE
char domainname[]; /* NIS or YP domain name */
#endif
};
Значит, доменное имя происходит из системы NIS/YP, если верить комментарию. Так что более чем вероятно, что в вашей сети может быть служба NIS / YP, которая возвращает вам имя, установленное ОС ubuntu.
{...; }
уже был принят вместо do...; done
в циклах for
в первой версии оболочки Bourne в Unix V7 в конце 70-х (см. исходный код ), хотя никогда не документировался до сих пор насколько я знаю.
Всеksh
(как исходные, полученные из оболочки Борна, так и переписанные ksh93 ), pdksh
¹ (и производные ),bash
(с самого начала в 1989 г. )и zsh
поддерживают его. Я не знаю ни одной ash
производной, которая это делает. yash
тоже нет, но yash
был написан в соответствии со стандартом POSIX.
В zsh
поддержка была добавлена в версии 2.0 в 1991 году, но как часть нового диапазона кратких форм для большинства конструкций, выходящих за рамки синтаксиса Борна. Это не только for i in 1 2; {...; }
, этоfor i in 1 2; any-command
(и его варианты ). И это задокументировано там и было с момента его введения .
AFAIK, помимо zsh
, только pdksh документирует это (как для for
, так и дляselect
).
Что касается формы ((init; condition; action))
, которая происходит от ksh93
и была скопирована zsh
и bash
.
Ни ((...))
, ни {...; }
вместо do...; done
не являются POSIX.
См. также Каково назначение ключевого слова do в циклах for в Bash? для получения дополнительных for
форм цикла.
¹ ни более ранние версии, ни оболочка Forsyth, на которой она основана. Он был добавлен в 5.1.1 в 1994 году, и это, вероятно, объясняет, почему он был там задокументирован
.