如何在shell脚本中逐行读取多行输出命令?

时间:2013-08-26 13:47:10

标签: shell multiline

如果我执行命令android list avd,我得到以下输出

Available Android Virtual Devices:
    Name: X10_Mini
    Path: /home/myhome/.android/avd/X10_Mini.avd
  Target: Android 2.1 (API level 7)
     ABI: armeabi
    Skin: 240x320
  Sdcard: 2G
---------
    Name: AVD_for_4in_WVGA_Nexus_S
    Path: /home/myhome/.android/avd/AVD_for_4in_WVGA_Nexus_S.avd
  Target: Android 2.1 (API level 7)
     ABI: armeabi
    Skin: 480x800
  Sdcard: 2G

我想在shell脚本中将Name和target存储在数组中 如果我使用命令

for elem in `android list avd | cut -d: -f1,2`; do
    echo $elem;
done;

变量$ elem(显然)将包含整个输出的每个单词。

如何读取每行命令行的输出?

1 个答案:

答案 0 :(得分:1)

也许我找到了一个不同的解决方案,我可以在循环之外使用变量 我必须将默认IFS更改为换行符

echo Searching for android virtual devices ...
IFS=$'\n';
for l in $(${PROGDIR}/android list avd) ; do
   VAR1=$(echo $l | cut -d: -f1 | sed -e 's/\s*//'); #sed removes trailing blanks
   if [ $VAR1 == "Name" ]; then
      NUM_AVD=$(($NUM_AVD+1));
   fi;
done
echo "NUM_AVD=$NUM_AVD"

在这种情况下,NUM_AVD正确为2