2009-01-20 65 views
6

我想以可讀方式打印列表以便屏幕顯示。我使用一個循環遍歷每個元素,並創建一個新的列表,用逗號和換行符進行格式化。問題是,在輸出的第一行中,我想要一個標題。例如,我想打印是這樣的:使用bash創建縮進文本

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 

有誰知道如何做到這一點?

回答

6

這將是

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

變化 '7' 到你的電話號碼。

也許你應該看看

man fmt 

也。

9
printf '%7s' 

可能是最有效的方法來做到這一點。

它大部分時間內置於shell中,如果不存在/ usr/bin/printf作爲coreutils的後備存在。

所以

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

產生

 _hello 
     _world 

(我用_替代空間在這裏,但空間也工作,因爲bash的理解 '')

+0

在'hello'和'world'前面不應該有七個'_'嗎?無論如何,謝謝。它的工作原理:) – 2009-01-20 15:14:11

+0

那麼,「%7s」是一個純粹的對齊規則,它表示「採取一個字符串,並將其與第7位對齊,即:它只會創建空間。'%2s''hello world'will not添加任何空間,因爲「你好世界」大於2,但'%40s \ n%40s \ n''你好''世界'將右對齊hello和世界40 – 2009-01-20 15:28:14