为什么Linux下使用expand命令时,空格数量不对?

为什么-t 2和-t 3会少空格呢?求指导

echo -e '1\t2' > t
expand -t 1 t
1 2
expand -t 2 t
1 2
expand -t 3 t
1  2
阅读 2.8k
2 个回答

\t 是指对齐到哪一列,而不是代表几个空格。简单测一下:

for i in {1..8}; do echo -e '1\t12\t123\t1234\t12345\t123456' | expand -t $i - ; done
1 12 123 1234 12345 123456
1 12  123 1234  12345 123456
1  12 123   1234  12345 123456
1   12  123 1234    12345   123456
1    12   123  1234 12345     123456
1     12    123   1234  12345 123456
1      12     123    1234   12345  123456
1       12      123     1234    12345   123456

tab一般默认为8个字符的宽度,但是这里要注意的是tab的宽度代表了前一个字符串的末尾到后一个字符串的开头的距离。可以在vim里面数一数,a tab b的宽度是a和b之间加7个空格,所以如果tab默认是n的话,中间是有n-1个空格的。
expand存在的意义是把tab改换成空格,所以:

expand -t 1 t

当你选的空格数为1的时候,理论上两个字母中间的空格数应该是0,但是这样不合乎常理,所以会给你多加一个空格,所以1的时候是一种特殊状态,正常的状态应该是从2开始的。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题