使用可用的Android设备填充bash数组

时间:2014-05-27 14:54:46

标签: bash shell

我试图在bash shell脚本中填充数组类型的全局变量。我在函数中使用了subshel​​l,我现在明白,在代码执行之后,所有内容都将丢失,并且全局声明的var未使用新值进行设置。现在我正在尝试一种不同的方法,但似乎仍然没有奏效。这是代码:

declare -a arr
let i=1
function availableDevices {
    while read line #get list of devices
      do
        if [ -n "$line" ] && [ "`echo $line | awk '{print $2}'`" == "device" ]
        then
          device="`echo $line | awk '{print $1}'`"
          echo "Add $device"
          arr[i]="$device"
          let i=$i+1
        fi
      done < <(adb devices)
    echo "devices: ${arr[*]}"
}

当我调用此函数时,会出现此错误:

name.sh: cannot make pipe for process substitution: Function not implemented

我是脚本新手,可能是自我解释但我不明白。 HOw可以实现这个功能吗?感谢

1 个答案:

答案 0 :(得分:1)

确保实际上bash,而不是sh,指定为hash-bang,因为似乎消息来自使用&#34;&lt; &lt;(&#34;基础。 也可以尝试:line =&#34; a b c&#34 ;; set - $ line;回声2 看看是否可以在你的脚本中使用,而不是echo $ line | awk ...,或者,&#34;这里是字符串&#34;通常优于回声的管道输出。这里的字符串看起来像这样(例子): rev&lt;&lt;&lt;测试