Ваш echo "$ a"
печатает "привет", а затем возвращается к началу строки (это то, что \ r
делает), напечатайте «снова», вернитесь снова, напечатайте «george», снова вернется и перейдет к следующей строке ( \ n
). Все это совершенно нормально, но, как указывает Чепнер , это не имеет ничего общего с Bash: \ r
и \ n
интерпретируются терминалом , а не Bash (именно поэтому вы получите полный вывод, если передадите команду по конвейеру od
).
Вы можете лучше увидеть это с помощью
$ a=$(printf "hellooooo\r again,\rgeorge\r\n")
$ echo "$a"
, так как это оставит конец перезаписанного текста:
georgen,o
Вы не можете использовать это, чтобы скрыть команды, только их вывод (и только если вы можете быть уверены, что перезаписать достаточным количеством символов), если не используется eval
, как вы показываете (но использование eval
обычно не рекомендуется). Более опасным трюком является использование CSS для маскировки команд , предназначенных для копирования и вставки с веб-сайтов.