2016-09-15 83 views
0

以下腳本輸出項目的編號列表。如何將bash數組輸出到多列編號項目

#!/bin/bash 

menu=($(ls ${HOME})) 
i=0 
for m in ${menu[@]} 
do 
    echo "$((i++))) $m" 
done 

結果:

0) item 
1) item 
2) item 
3) item 

我想使更多的數據在一個頁面上符合該列表分割成多個列。僅管道到echo "$((i++))) $m" | column列仍然會導致只有一列,現在每行以0)開頭,後面跟着列出的項目。

How to output an array's content in columns in BASH中給出的答案儘可能地產生多列輸出。

menu=($(ls $HOME)) 
echo " ${menu[@]/%/$'\n'}" | column 

但是因爲陣列是引用,使用的是bash算術方法i=0; echo "$((i++))"不進行編號作爲唯一的號碼輸出工作是第一0

我的問題是:如何將數據中的數據輸出到多列的編號列表中?

0) item  4) item  8) item 
1) item  5) item  9) item 
2) item  6) item  10) item 
3) item  7) item  11) item 
+0

你的代碼有多種問題,當涉及到含有空格或shell轉義字符的文件名。 [不要使用'ls'](http://mywiki.wooledge.org/ParsingLs)和[引用所有內容](/ questions/10067266/when-to-wrap-quotes-around-a-variable)。無論如何,看起來你實際上只是在「$ HOME」/ *' – tripleee

+0

中選擇文件。我知道你是對的。在這個特定的例子中,雖然我確信沒有任何文件名包含任何空格或元字符。 –

回答

1

添加一些改變你原來的劇本,現在xargscolumn -t將每三條記錄,然後經過分割線column -t將正確地壓縮它。避免使用ls來獲取文件列表。

#!/bin/bash 

menu=($HOME/*) 
i=0 
for m in ${menu[@]} 
do 
    echo "$((i++))) $(basename $m)" 
done |xargs -L3 |column -t 

輸出示例:

0) Desktop  1) Documents 2) Downloads 
3) Music  4) Pictures 5) Public 
6) Templates 7) XXX  8) Videos 
9) backup_XXXX 10) dna  11) scripting 
12) sessions  13) sh   14) temp 
3

你怎麼樣把它打印出來單列和管它pr

$ for i in {0..11}; do echo $i ; done|pr -ts" " --columns 3 
0 4 8 
1 5 9 
2 6 10 
3 7 11 
+1

確實'pr'是這個工作的正確工具+1 – anubhava

+0

我得到錯誤消息'PR:非法選項 - '' –

+0

那麼,你有's'在'ps'的參數中有個'''?你在用什麼作爲操作系統? –