Shell从cat逐行读入数组

时间:2010-11-15 15:29:33

标签: unix shell

我有一个输出类似的命令:

lucid32
lucid64

我需要将其读入数组。所以在这种特殊情况下,我需要一个等价的:

boxes =(lucid32 lucid64)

我试着这样读:

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

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

我该如何解决?

更新:

它看起来不起作用,因为这个命令会输出一堆垃圾:

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

4 个答案:

答案 0 :(得分:1)

尝试使用boxes=$(mycommand list | tr '\n' ' ')

答案 1 :(得分:1)

尝试

boxes=(`mycommand list | xargs`)

答案 2 :(得分: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')

它没有其他一些解决方案快,但你可以控制如何更好地存储数组元素。

答案 3 :(得分:1)

什么外壳?有些不支持数组。

您看到的“垃圾”是光标移动或文本着色等的终端控制代码。可能是代码清除到行尾。

输出这些字符的命令是什么?某些命令会在输出输出到tty以外的某个位置时自动禁用这些代码。其他人有命令行选项来关闭它。还有一些实用程序会为您删除代码。