Как установить 4 пробела в bash
В VIM это выглядит как set tabstop=4
, но я не знаю, как установить его в bash
например:
echo -e "1234567890\t321\n1\t2\n123\t1"
токовый выход:
1234567890 321
1 2
123 1
Мне нужен вывод следующим образом:
1234567890 321
1 2
123 1
Он может быть показан в любом месте, как cat somefile
или php -r 'echo "\t123";'
Как установить ширину табуляции в bash?
Ответы
Ответ 1
Это не свойство вашей оболочки (или php или cat). Это ваш терминал, который управляет выходом.
Используйте команду tabs
, чтобы изменить поведение:
$ tabs 4
$ echo -e "a\tb"
a b
$ tabs 12
$ echo -e "a\tb"
a b
(tabs
указан в POSIX, а вывод выше "faked": он все еще является символом табуляции между двумя буквами.)
Ответ 2
Вы можете установить регулярные или нерегулярные интервалы с помощью утилиты tabs
. Он будет работать независимо от того, выполняете ли вы свой собственный вывод, используя cat
для вывода файла, который уже содержит вкладки или с использованием вывода программы, которую вы не контролируете.
Однако, если вы контролируете свой вывод, предпочтительнее использовать printf
вместо echo
и форматировать строки вместо вкладок.
$ printf '%-12s%8.4f %-8s%6.2f\n' 'Some text' 23.456 'abc def' 11.22
Some text 23.4560 abc def 11.22
$ format='%*s%*.*f %*s%*.*f\n'
$ printf "$format" -12 'Some text' 8 4 23.456 -8 'abc def' 6 2 11.22
Some text 23.4560 abc def 11.22
Если вы не хотите, чтобы кто-то другой мог контролировать вывод вашей программы с помощью утилиты tabs
.
Ответ 3
Вы можете использовать setterm для установки этого
setterm -regtabs 4
Я поместил его в свой .bash_profile, но не связанный с ним bash