Чи може хтось пояснити, що відбувається за кадром, коли персонаж втікає в оболонці 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
натомість - див. ВИКОРИСТАННЯ ВИКОРИСТАННЯ ТА RATIONALE на наведеному вище посиланні, що описує, як зробити printf
дію заміною echo
.
echo -e
поведінка так чи інакше не визначено стандартами - див. pubs.opengroup.org/onlinepubs/9699919799/utilities/echo.html . Вихід повністю визначається реалізацією, якщо десь у вводах є буквальний зворотний проріз, і єдиний дозволений варіант - це-n
означає, що реалізація, що відповідає стандартам, маєecho -e
друкувати-e
на своєму виході.