繁体   English   中英

使用新行作为IFS的bash数组

[英]bash array with new line as IFS

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

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

因为我需要补充这个问题,我不得不说我为什么会有点困惑

也许你正在寻找这个:

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

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

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

<(lsblk)称为进程替换,您可以在man bashProcess Substitution部分中阅读它。

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM