为什么这不会产生预期的结果数组
IFS=$'\n'; read -a list <<< `lsblk` ; echo ${list[*]};
因为我需要添加这个问题,我不得不说我为什么
有点困惑答案 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[*]}