Czy ktoś mógłby wyjaśnić, co dzieje się za kulisami ucieczki postaci w powłoce Linux? Próbowałem następujących rzeczy i korzystałem z wyszukiwarki Google, bez żadnego zrozumienia, co się dzieje (i jak):
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!
Jestem tam całkowicie zagubiony, więc na przykład, dlaczego trzy odwrotne ukośniki dają tylko jeden ukośnik? Spodziewałbym się: dwie pierwsze uciekną do jednej, trzecia nie znajdzie nic do ucieczki, więc pozostanie ukośnikiem (linia w pierwszym eksperymencie), ale dzieje się tak, że trzecia po prostu znika.
Dlaczego dostaję jeden odwrotny ukośnik od czterech \\\\ Hello
? Spodziewałbym się, że każda para da jeden ukośnik -> dwa ukośniki odwrotne.
I dlaczego potrzebuję trzech odwrotnych ukośników w ostatnim przypadku, aby uciec \ n? co dzieje się w tle ucieczki, aby to zdobyć? i czym różni się od \\n
przypadku?
Doceniam każde wyjaśnienie tego, co dzieje się w poprzednich liniach.
echo -e
nie jest bezpieczne: echo
zachowa się zgodnie ze standardem, jeśli obie opcje posix
i xpg_echo
opcje wykonawcze są włączone, lub jeśli zostaną skompilowane z równoważnymi opcjami kompilacji. printf
Zamiast tego należy zastosować bezpieczną praktykę - patrz sekcje WYKORZYSTANIE APLIKACJI i WYNIKI powyższego linku, opisujące sposób printf
działania w zastępstwie echo
.
echo -e
zachowanie nie jest w żaden sposób zdefiniowane w standardach - patrz pubs.opengroup.org/onlinepubs/9699919799/utilities/echo.html . Dane wyjściowe są całkowicie zdefiniowane w implementacji, jeśli dosłownie występuje gdziekolwiek dosłowny ukośnik odwrotny, a jedyną dozwoloną opcją jest-n
(co oznacza, że implementacja zgodna ze standardami będzieecho -e
drukować-e
na wyjściu).