[英]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 bash
的Process 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.