Может кто-нибудь объяснить, что происходит за кулисами в экранировании персонажей в оболочке Linux? Я попробовал следующее и много гуглил, но безуспешно понял, что (и как) происходит:
root@sv01:~# echo -e "\ Hello!"
\ Hello!
root@sv01:~# echo -e "\\ Hello!"
\ Hello!
root@sv01:~# echo -e "\\\ Hello!"
\ Hello!
root@sv01:~# echo -e "\\\\ Hello!"
\ Hello!
root@sv01:~# echo -e "\\\\\ Hello!"
\\ Hello!
root@sv01:~# echo -e "\\\\\\ Hello!"
\\ Hello!
root@sv01:~# echo -e "\\\\\\\ Hello!"
\\ Hello!
root@sv01:~# echo -e "\\\\\\\\ Hello!"
\\ Hello!
root@sv01:~# echo -e "\\\\\\\\\ Hello!"
\\\ Hello!
root@sv01:~# echo -e "\n Hello!"
Hello!
root@sv01:~# echo -e "\\n Hello!"
Hello!
root@sv01:~# echo -e "\\\n Hello!"
\n Hello!
Я там полностью потерялся, так, например, почему три обратные косые черты дают только одну обратную косую черту? Я ожидаю: первые два будут сброшены на один, третий не найдет ничего, что можно избежать, поэтому он останется косой чертой (строка в первом эксперименте), но происходит то, что третий просто исчезает.
Почему я получаю одну обратную косую черту из четырех \\\\ Hello
? Я ожидаю, что каждая пара даст одну обратную косую черту -> две обратных косых черты.
И почему мне нужно три обратных слеша в последнем случае, чтобы избежать \ n? что происходит на фоне побега, чтобы получить это? а чем он отличается от \\n
дела?
Я ценю любое объяснение того, что происходит в предыдущих строках.
echo -e
она небезопасна: echo
будет вести себя в соответствии со стандартом, если включены оба параметра posix
и xpg_echo
параметры времени выполнения, или если они скомпилированы с эквивалентными параметрами времени сборки. Безопасной практикой является использование printf
вместо этого - см. Разделы ИСПОЛЬЗОВАНИЕ ПРИЛОЖЕНИЯ и ОБОСНОВАНИЕ вышеупомянутой ссылки, описывающие, как заставить printf
действовать в качестве замены echo
.
echo -e
в любом случае поведение не определяется стандартами - см. pubs.opengroup.org/onlinepubs/9699919799/utilities/echo.html . Выходные данные полностью определяются реализацией, если во входных данных есть буквальная обратная косая черта, и единственный допустимый параметр - это-n
(что означает, что реализация, соответствующая стандартам, будет иметьecho -e
печать-e
на своем выходе).