使用bash创建缩进文本

时间:2009-01-20 12:18:28

标签: bash string

我想以可读的方式打印列表。我使用循环遍历每个元素并创建一个用逗号和换行符格式化的新列表。问题是在输出的第一行,我想要一个标题。例如,我想打印这样的东西:

List: red, green, blue, black, cars,
      busses, ...

问题是在第二行和后续行中创建缩进。我希望缩进具有给定的长度。因此,问题减少到创建给定长度的空行。也就是说,我想要一个函数create_empty_line_of_length,它输出给定数量的空格。

length=5
echo "start:$(create_empty_line_of_length $length) hello"

在这种情况下,输出应为:

start:      hello

有谁知道怎么做?

3 个答案:

答案 0 :(得分:9)

 printf '%7s' 

可能是最有效的方法。

它大部分时间内置了一个shell,如果不是/ usr / bin / printf作为coreutils的后备存在。

所以

 printf '%7s%s\n%7s%s\n' '_' 'hello' '_' 'world'

生成

      _hello
      _world

(我在这里使用了_而不是空格,但空间也有效,因为bash理解'')

答案 1 :(得分:6)

这将是

yes ' ' | head -7 | tr -d '\n'

将“7”更改为您的号码。

也许你应该看看

man fmt

答案 2 :(得分:1)