эхо выводит другой ответ от sh и bash

Я запускал свой скрипт тремя способами, и результат был разным. Не могли бы вы объяснить мне, почему он работает именно так? Спасибо!! Вот мой сценарий

#!/bin/bash
#Program:
#     This program shows "Hello World!" in your screen.
echo -e "Hello World! \a\n" 
exit 0

И если я запускаю его с помощью bash и ./, например, bash sh01.sh, вывод будет

Привет, мир!

Однако, если я использую sh как sh sh01.sh, это будет похоже на

-e Привет, мир!

А вот и другая информация

  1. ОС: Ubuntu 16.04.3
  2. введите ш -> тире

person Lincoln    schedule 29.10.2017    source источник
comment
Bash — очень расширенная оболочка, а Dash — очень простая и совместимая со стандартами оболочка. Это означает, что Bash может добавлять расширенные версии стандартных команд, таких как echo, которая согласно стандарту принимает только один необязательный аргумент (и это не -e). Дополнительную информацию см. в официальном справочнике POSIX о echo.   -  person Some programmer dude    schedule 29.10.2017
comment
Связано: stackoverflow.com/questions/35603323/   -  person codeforester    schedule 29.10.2017
comment
Я понял, спасибо!!!   -  person Lincoln    schedule 30.10.2017


Ответы (1)


echo не очень переносим (даже echo Bash может вести себя по-разному в разных ОС, которые могут использовать разные параметры по умолчанию при компиляции Bash). Вы можете использовать printf. Согласно posix:

Невозможно использовать переносимое echo во всех системах POSIX, если только -n (в качестве первого аргумента) и escape-последовательности не опущены. Утилиту printf можно использовать для переноса, чтобы эмулировать любое традиционное поведение утилиты echo [...]

person pynexj    schedule 29.10.2017
comment
Да, куча моих скриптов, которые использовали echo -n, сломались, когда OS X v10.5 поставлялась с bash, скомпилированным с другими параметрами. Они переключили его обратно в каком-то более позднем обновлении, но я точно не знаю, когда, потому что вместо этого я переключил все свои сценарии на использование printf. printf немного сложнее в использовании, чем echo, но намного более предсказуема. - person Gordon Davisson; 29.10.2017
comment
Благодарю вас! Позже я снова сталкиваюсь с похожей ситуацией, например, newgrp ведет себя по-разному в Ubuntu и OSX. ТТ. Теперь у меня есть почему хх - person Lincoln; 30.10.2017