[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: echo в dash и bash



> В обеих оболочках это встроенная команда, однако у них разное поведение.
> Например, по-умолчанию echo в bash (как и /bin/echo) не интерпретирует
> escape последовательности (навроде \n, \t и т.п.),
В общем случае, может интерпретировать, а может и нет.
Читай susv3. Полный бардак с этим echo.

> чтобы это включить надо использовать параметр -e (и -E чтобы
> выключить). В dash нет параметров -e/-E, есть только -n.
SUSv3 определяет только -n. Все остальное - undefined behaviour.

> И работает
> оно только в режиме интерпретации. Поведение несколько странное, а в
> стандарте на шелл я не нашёл вообще ничего про echo. Видимо, оно
> берёт за основу поведение "POSIX-стандартного" /bin/echo.

> Вопрос в следующем - как лучше делать переносимный скрипт, когда
> требуется использовать escape последовательности?

Использовать printf и никаких echo! Не дай
бог, начинается с минуса или содержит backslash.
Смерть echo! А ведь хорошая когда-то команда была,
соответствовала названию :-(

> Можно прописать вызовы /bin/echo, но будут ли они на не-GNU системе
> работать так же (поддерживая ключ -e)?
> Можно использовать printf
> (это вроде более переносимо, но как-то редко попадается на глаза,
> как будто его предпочитают не использовать). Что правильнее?
Безопаснее в смысле переносимости использовать printf,
и использовать echo ТОЛЬКО для single-quoted константных строк.

-- 
Best regards, Aleksey Cheusov.



Reply to: