我的剧本:
#!/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,我想要最后一个输出,感谢您的帮助
答案 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