带选项卡的bash echo显示

时间:2018-01-06 12:16:01

标签: bash tabs echo

我的剧本:

#!/bin/bash
echo  -e "dzddddddddddddddddddddddddddddddddddd\tdd"
echo  -e "dzdddddddddd\tdd"
echo  -e "dzddddddd\tdd

为什么我有这个:
输出

dzddddddddddddddddddddddddddddddddddd   dd
dzdddddddddd    dd
dzddddddd       dd

而不是:

dzddddddddddddddddddddddddddddddddddd   dd
dzdddddddddd                            dd
dzddddddd                               dd

如果可以使用echo,我想要最后一个输出,感谢您的帮助

3 个答案:

答案 0 :(得分:3)

如果您的终端支持,则可以手动设置制表位。 (参见https://unix.stackexchange.com/questions/46368/set-tab-width-in-gui-terminal。)例如,假设默认制表位已经到位:

echo -e "dzddddddddddddddddddddddddddddddddddd\t$(tput tbc; tput hts)dd"
echo -e "dzdddddddddd\tdd"
echo -e "dzddddddd\tdd"

产生

dzddddddddddddddddddddddddddddddddddd   dd
dzdddddddddd                            dd
dzddddddd                               dd

tput tbc清除所有现有制表位。如果光标当前位于 n 列中,tput hts会为每个 n 列创建制表位。由于\t在上面示例中的tput tbc之前使用,因此它使用预先存在的制表位,可能每8个字符。

答案 1 :(得分:2)

使用printf代替echo

printf '%-37s   %2s\n' dzddddddddddddddddddddddddddddddddddd dd
printf '%-37s   %2s\n' dzdddddddddd dd
printf '%-37s   %2s\n' dzddddddd dd

37是最长字符串的长度。你可以通过

获得它
s=dzddddddddddddddddddddddddddddddddddd
echo ${#s}

答案 2 :(得分:2)

使用column

#!/bin/bash

{
  echo -e "dzddddddddddddddddddddddddddddddddddd\tdd"
  echo -e "dzdddddddddd\tdd"
  echo -e "dzddddddd\tdd"
} | column -s $'\t' -t

来自man column

  

-s:指定一组字符,用于分隔-t选项的列。

     

-t:确定输入包含的列数并创建表。默认情况下,列用空格分隔,或使用-s选项提供的字符分隔。适用于漂亮的打印显示。

输出:

dzddddddddddddddddddddddddddddddddddd  dd
dzdddddddddd                           dd
dzddddddd                              dd