2016-07-23 64 views
2

是否有一个在Bash中缩进字符串(用于输出)的示例? 我发现使用printf的例子,但他们似乎没有按预期工作。 我想简单地用给定数量的空格缩进给定的字符串。如何使用printf在Bash中缩进字符串?

echo "Header" 
indent "Item 1" 2 
indent "Sub Item 1a" 4 
indent "Sub Item 1b" 4 

会产生输出

Header 
    Item 1 
    Sub Item 1a 
    Sub Item 1b 

回答

5

printf,像%3s的意思是“一个字符串,而是尽可能多的初始空间为有需要确保该字符串是至少3列宽”。

即使字符串是空字符串'',这种情况下也可以工作,在这种情况下,%3s实质上意味着“三个空格”。

因此,例如,indent "Sub Item 1a" 4可以表示为printf '%4s%s\n' '' "Sub Item 1a",它打印四个空格后跟随"Sub Item 1a"和一个换行符。

如果你愿意,你可以实现indent作为一个功能:

function indent() { 
    local string="$1" 
    local num_spaces="$2" 

    printf "%${num_spaces}s%s\n" '' "$string" 
} 
+0

必须添加换行符在那里'printf的 “%$ {} num_spaces s%S \ n”' – IntrovertedRoot