Команда Unix echo с опцией -e

Команда Unix echo с опцией -e

Я читал об этой echoкоманде в UNIX и нашел -eопцию, которая используется для включения интерпретации экранированных обратных косых черт. Дело в том, что одной из этих экранированных последовательностей обратной косой черты была \ \, но когда я использовал две команды:

echo "hello\\\world"

и

echo -e "hello\\\world"

я получаю тот же вывод: hello\\world, так в чем же разница? |

решение1

По умолчанию раскрываются escape-последовательности, опция -e является нестандартной.

Если ваша реализация echo не включает -e в вывод echo, она не соответствует требованиям.

Проблема здесь в том, что существуют реализации, которые следуют только минимальным требованиям POSIX и игнорируют тот факт, что платформа, которую разрешено называть UNIXсовместимой, должна реализовать поддержку XSIулучшений POSIX.

BTW: bash на MacOS X и Solaris компилируется так, чтобы всегда расширять escape-последовательности. Bash в варианте компиляции по умолчанию несовместим с POSIX XSI.

Оболочки, совместимые с POSIX, такие как ksh93, bosh или dash, по умолчанию расширяют escape-последовательности по мере необходимости.

Если вы хотите проверить поведение, ваша тестовая строка не очень хорошая идея. Лучший тест будет:

echo '\tfoo'

и проверить, fooдобавлен ли в выводе символ табуляции.

Причина, по которой у вас могли возникнуть проблемы, заключается в том, что вы использовали foo\\barи что оболочка уже обрабатывает обратные косые черты в строках в двойных кавычках. Если вы хотите проверить поведение echo, вам нужно использовать строки в одинарных кавычках в качестве аргументов.

Связанный контент