Случайно узнал, что в bash есть команда printf (хотя пользуюсь ей давно). До этого думал, что это программа из пакета coreutils.
Но я переименовал в каталоге /usr/bin программу printf в printf0, а команда printf всё равно работает.
И возник вопрос: есть ли между ними разница? По аналогии с разницей между командами time и программой /bin/time.
В чём отличие программы printf от команды printf?
Модератор: Модераторы разделов
-
- Сообщения: 1219
- ОС: Linux Debian
В чём отличие программы printf от команды printf?
Спасибо сказали:
-
- Сообщения: 1369
- ОС: Mageia 5.1 & 8 x86_64, KDE
Re: В чём отличие программы printf от команды printf?
Printf как замена команды echoсинтаксис команды printf взят от функции printf() языка программирования Си (и еще дюжины других)
интересный вопрос, из любопытства немного ознакомился с командой
зы: ОСТОРОЖНО, в моей ссылке, в конце статьи есть опасный пример команды — Опция -v ПЕРЕМЕННАЯ_ОКРУЖЕНИЯ (автор предупреждает)
или
Команда printf в Bash
ссылки из инета больше для меня самого (чтобы потом почитать)
-
- Сообщения: 901
- ОС: debian, fedora (i3-wm)
Re: В чём отличие программы printf от команды printf?
Одна команда встроенная, одна внешняя из coreutils. По умолчанию вызывается встроенная, если она не отключена с помощью enable. Зачем переименовывать. Внешняя вызывается:
Встроенная:
или просто
Посмотреть встроенные:
Удостоверится какая программа вызывается:
Две полностью независимые сборки программы, очень малый процент вероятности чтобы они оказались вдруг идентичными.
Код: Выделить всё
env printf
Код: Выделить всё
builtin printf
Код: Выделить всё
printf
Код: Выделить всё
enable -p
compgen -b
Код: Выделить всё
strace -f -e trace=%process /bin/bash -c 'env printf ""'
strace -f -e trace=%process /bin/bash -c 'builtin printf ""'
strace -f -e trace=%process /bin/bash -c 'printf ""'
-
- Модератор
- Сообщения: 20939
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Re: В чём отличие программы printf от команды printf?
Очевидно, это разные реализации одной и той же стандартной команды. Информацию о различиях логично поискать в документации (man printf и man bash).
Пишите правильно:
в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
-
- Сообщения: 1219
- ОС: Linux Debian
Re: В чём отличие программы printf от команды printf?
Это я понял.
Спасибо. Никогда не пользовался командой env. Это немного проще, чем набирать перед командой /bin/ или, тем более, /usr/bin/olecya писала: ↑08.07.2023 10:15По умолчанию вызывается встроенная, если она не отключена с помощью enable. Зачем переименовывать. Внешняя вызывается:Код: Выделить всё
env printf
Посмотрел. И удивил один момент (не считая того, что их там оказалось больше 60):olecya писала: ↑08.07.2023 10:15Посмотреть встроенные:Код: Выделить всё
printf
Код: Выделить всё
enable -p compgen -b
Я увидел в списке команду [. Хотя есть программа /usr/bin/[
Но дело в том, что я когда-то прочитал, что вместо команды [ лучше использовать более продвинутую команду [[
И действительно, which [[ выдаёт пустую строку. Хотя bash [[ понимает.
Или это не команда, а просто элемент синтаксиса команды, например if?
Shell
mik13@md5:~$ [
bash: [: отсутствует символ «]»
mik13@md5:~$ [ ]
mik13@md5:~$ [[ ]]
bash: синтаксическая ошибка рядом с «]]»
mik13@md5:~$ [[
>
-
- Сообщения: 2854
- ОС: Gentoo
Re: В чём отличие программы printf от команды printf?
Это элемент синтаксиса bash, двойные скобки позволяют использовать расширенный синтаксис, их можно использовать и без оператора if:
Shell
$ [ "Hello" = "Hello" ] ; echo $?
Shell
$ [[ "Hello" =~ ^H+.+o$ ]] ; echo $?
Shell
$ [[ "Hello" =~ ^H+[[:print:]]+o$ ]] ; echo $?
-
- Сообщения: 901
- ОС: debian, fedora (i3-wm)
Re: В чём отличие программы printf от команды printf?
Shell
$ command -V [[
[[ is a shell keyword
command -V [
[ is a shell builtin
Код: Выделить всё
help [[
help [
help test
help if
-
- Модератор
- Сообщения: 20939
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Re: В чём отличие программы printf от команды printf?
[[ — это не самостоятельная команда, а часть составной команды bash. О чём, опять-таки, можно прочитать в документации. И нет, её не лучше использовать, чем [. Они ведут себя по-разному, и надо выбирать ту или иную в зависимости от потребностей.
Пишите правильно:
в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |