Я читал об этой 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
, вам нужно использовать строки в одинарных кавычках в качестве аргументов.