И реализация GNU, и реализация MacOS (FreeBSD) printf
являются разными программами.Оба стремятся быть совместимыми со стандартом POSIX.
POSIX оставляет представление чисел с плавающей запятой открытым для реализации printf.Их аргументация заключается в том, что все вычисления в оболочке в любом случае целочисленные.
Спецификации преобразования форматирования с плавающей точкой для printf () не требуются, поскольку вся арифметика в оболочке является целочисленной арифметикой.Утилита awk выполняет вычисления с плавающей точкой и предоставляет собственную функцию printf.Утилита bc может выполнять арифметику с плавающей точкой произвольной точности, но не предоставляет широких возможностей форматирования.(Эта утилита printf на самом деле не может использоваться для форматирования вывода bc; она не поддерживает произвольную точность.) Реализациям рекомендуется поддерживать преобразования с плавающей точкой в качестве расширения.
https://pubs.opengroup.org/onlinepubs/9699919799/utilities/printf.html
PS:
5.1
- это , а не число с плавающей запятой в bash.bash не поддерживает плавающие числа.
5.1
- это строка, интерпретируемая как printf
в зависимости от локали (!)
theymann@theymann-laptop:~/src/sre/inventory-schema$ LANG=en_US.UTF8 printf "%.16f\n" 5.10
5.1000000000000000
theymann@theymann-laptop:~/src/sre/inventory-schema$ LANG=de_DE.UTF8 printf "%.16f\n" 5.10
bash: printf: 5.10: Ungültige Zahl. # << German: Bad Number
0,0000000000000000
Примечание. В Германии в качестведесятичный разделитель.
Разница в выводе между обычным пользователем и никто не должен оболочку, которая используется.некоторые оболочки, например busybox, имеют собственную реализацию printf
.Кстати, я очень удивлен, что никто не может выполнять команды в вашей системе!