我有一个输出类似的命令:
lucid32
lucid64
我需要将其读入数组。所以在这种特殊情况下,我需要一个等价的:
boxes =(lucid32 lucid64)
我试着这样读:
boxes=(`mycommand list | tr '\n' ' '`)
但它会返回$'\ 033'[0Klucid
我该如何解决?
更新:
它看起来不起作用,因为这个命令会输出一堆垃圾:
\r\e[0Klucid32\n\r\e[0Klucid64\n
答案 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以外的某个位置时自动禁用这些代码。其他人有命令行选项来关闭它。还有一些实用程序会为您删除代码。