使用bash创建缩进文本

Kar*_*våg 6 string bash

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

List: red, green, blue, black, cars,
      busses, ...
Run Code Online (Sandbox Code Playgroud)

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

length=5
echo "start:$(create_empty_line_of_length $length) hello"
Run Code Online (Sandbox Code Playgroud)

在这种情况下输出应该是:

start:      hello
Run Code Online (Sandbox Code Playgroud)

有谁知道如何做到这一点?

Ken*_*ric 9

 printf '%7s' 
Run Code Online (Sandbox Code Playgroud)

可能是最有效的方法.

它是大多数时候内置的shell,如果不是/ usr/bin/printf作为coreutils的后备存在.

所以

 printf '%7s%s\n%7s%s\n' '_' 'hello' '_' 'world'
Run Code Online (Sandbox Code Playgroud)

产生

      _hello
      _world
Run Code Online (Sandbox Code Playgroud)

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


squ*_*tte 6

这将是

yes ' ' | head -7 | tr -d '\n'
Run Code Online (Sandbox Code Playgroud)

将"7"更改为您的号码.

也许你应该看看

man fmt
Run Code Online (Sandbox Code Playgroud)

也.