Ответ 1
env
не находится в bash
, это автономный исполняемый файл, он используется для установки или очистки переменной среды перед запуском программы. В вашем конкретном случае он запускает двоичный printf
вместо встроенной оболочки. Вы можете добиться того же результата, используя абсолютный путь:
/usr/bin/printf '\u00d5'
Наименее интрузивный метод, возможно, следующий: переопределите функцию printf
и сохраните Bash остальные. Источник файла, который содержит следующее:
function printf()
{
$(which printf) "[email protected]"
}
или как однострочный function printf() { $(which printf) "[email protected]"; }
. Конечно, вы можете заменить $(which printf)
на /usr/bin/printf
...
Затем просто используйте printf, как вы привыкли. Ваш script остается прежним, и вы даже можете ввести условие для определения функции только для определенных версий Bash.
AFAIK вы также можете оставить function
, но я считаю, что он добавляет читаемость.
[EDIT: ключевое слово function
- расширение bash
; printf () { ...; }
- это синтаксис POSIX. Если вы используете ключевое слово function
,() после имени функции являются необязательными.]
Как правило, env
также используется в строках хеш-бэнга скриптов, которые стремятся быть переносимыми. Причина в том, что env
почти всегда находится в /usr/bin/env
, а bash
не всегда находится в /bin/bash
, как следует из многих строк хеширования. Пример:
#!/usr/bin/env bash
также работает для других программ/переводчиков:
#!/usr/bin/env python