使用新行作为IFS的bash数组

时间:2013-12-07 22:57:04

标签: arrays bash

为什么这不会产生预期的结果数组

IFS=$'\n'; read -a list <<< `lsblk` ; echo ${list[*]};

因为我需要添加这个问题,我不得不说我为什么

有点困惑

2 个答案:

答案 0 :(得分:1)

也许你正在寻找这个:

IFS=$'\n'; readarray list < <(lsblk)

也许以这种方式检查结果会更好:

for i in ${list[@]}; do echo $i; done

<(lsblk)称为流程替换,您可以在man bash流程替换部分阅读。

在没有readarray的系统上,您可以这样做:

IFS=$'\n'; while read line; do list+=($line); done < <(lsblk)

答案 1 :(得分:1)

可能您需要使用 -l <​​/ strong>标志来获取设备列表,因为默认情况下 lsblk 输出在某个树视图中。 (我没有lsblk,但有lsusb我有预期的结果):

IFS=$'\n'; read -a list <<< `lsblk -l` ; echo ${list[*]};

您还可以尝试以下更原生的数组创建方式:

list=( $(lsblk -l) ); echo ${list[*]}