Эхо-символы табуляции в сценарии bash

Используйте printf, а не echo.

Существует bashrc несколько разных версий команды bash-script echo. Есть /bin/echo (который может быть bashrc или не быть версией GNU Coreutils, в bash зависимости от системы), а bash-script команда echo встроена в большинство .bashrc оболочек. В разных версиях bash-function есть разные способы (или bash-function нет) для указания или отключения tab экранирования для управляющих bash символов.

printf, напротив, имеет .bash-profile гораздо меньше вариантов. Он bash может существовать как команда, обычно bash-function /bin/printf, и он встроен в некоторые spaces оболочки (bash и zsh имеют bash-variables его, tcsh и ksh нет), но bash-alias различные версии намного bashrc более похожи друг на друга, чем tabpanel разные версии echo есть. И вам bash-alias не нужно запоминать параметры spaces командной строки (за некоторыми .bashrc исключениями; GNU Coreutils bash-alias printf принимает --version и --help, а встроенный .bash-profile bash printf принимает -v var для bash-script сохранения вывода в переменной).

Для bash вашего примера:

res='           'x # res = "\t\tx"
printf '%s\n' "[$res]"

А теперь мне tabpanel пора признать, что echo будет bash работать так же хорошо для .bashrc примера, о котором вы спрашиваете; вам bash-alias просто нужно заключить аргумент bash-variables в двойные кавычки:

echo "[$res]"

как писал bash-function кмкаплан (два с половиной .bash-profile года назад я только что заметил!). Проблема tab с вашими исходными командами:

res='           'x # res = "\t\tx"
echo '['$res']' # expect [\t\tx]

не bash-alias с echo; дело в том, что оболочка bash заменила табуляцию пробелом tabpanel до того, как echo когда-либо echo ее увидел.

echo подходит для простого spaces вывода, например echo hello world, но вы spaces должны использовать printf всякий spaces раз, когда хотите сделать .bashrc что-то более сложное. Вы .bashrc можете заставить echo работать, но echo результирующий код, скорее .bashrc всего, выйдет из строя, если tabs вы запустите его с другой bashrc реализацией echo или другой оболочкой.

bash

tabs

echo

spaces

2022-11-17T22:26:48+00:00
Вопросы с похожей тематикой, как у вопроса:

Эхо-символы табуляции в сценарии bash