2010-11-15 32 views
1

我有其輸出類似的東西的命令:殼牌從貓線讀取由線成陣列

lucid32 
lucid64 

我需要將其讀入數組。因此,在這種特殊情況下,我需要的等效:

boxes =(lucid32 lucid64) 

我想這樣來閱讀:

boxes=(`mycommand list | tr '\n' ' '`) 

但它返回$ '\ 033'[0Klucid

我怎麼能修復?

更新:

它看起來像它沒有工作,因爲該命令將輸出一堆垃圾:

\r\e[0Klucid32\n\r\e[0Klucid64\n 
+0

我不知道'boxes =(strings <(mycommand list))'會起作用嗎(假設bash或groks進程替換的shell) – 2010-11-15 18:43:41

回答

1

什麼shell?有些不支持數組。

您看到的「垃圾」是用於光標移動或文本着色等的終端控制代碼。它可能是清除到行尾的代碼。

什麼命令輸出這些字符?當某些命令的輸出轉到tty以外的地方時,某些命令會自動禁用這些代碼。其他人有命令行選項來關閉它。還有一些實用程序可以爲您解除代碼。

1

嘗試用boxes=$(mycommand list | tr '\n' ' ')

1

嘗試

boxes=(`mycommand list | xargs`) 
1

如何關於這個(在bash中):

boxes=(); while read l; do boxes+=("$l"); done < <(mycommand list) 

這會將每個輸出行放在一個單獨的數組元素中。雖然如此:

boxes=(); while read l; do boxes+=("$l"); done < <(mycommand list | tr "$IFS" '\n') 

也將分隔shell參數分隔符上的元素。這將在分開的空白:

boxes=(); while read l; do boxes+=("$l"); done < <(mycommand list | tr '[:space:]' '\n') 

這不是一樣快,一些其他的解決方案,但你可以控制如何存儲數組元素更好。