2014-05-27 4 views
1

Я пытаюсь заполнить глобальную переменную типа массива в сценарии оболочки bash. Я использовал подоболочку в функции, и теперь понимаю, что после выполнения кода все потеряно, а глобальный объявленный var не был установлен с новым значением. Теперь я пытаюсь использовать другой подход, но, похоже, не работает хорошо. Это код:Заполнение массива bash с доступными устройствами Android

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 может ли функция не быть реализована? Благодаря

+2

_cannot сделать трубу для замены процесса:. Функция не implemented_ - Дает ли это намек Ваша оболочка не поддерживает '<(...)' синтаксис – devnull

ответ

1

убедитесь, что есть на самом деле удар, не Sh, указанный в качестве хэш-паф, как это кажется, что сообщение приходит от использования «< < (» bashism Также попробуйте: линия = «ABC», набор -. - $ line; echo 2 Посмотрите, может ли это быть использовано в вашем скрипте вместо echo $ line | awk ..., альтернативно, «Здесь строки» часто предпочтительнее, чем вывод эхо-сигнала. A Здесь строка выглядит так: (пример): ред < < < тест

+0

спасибо за ответ, да. это файл .sh. Я пытаюсь получить значение массива вне подоболочки и не очень хорошо разбираюсь в этом. :) – user1140656

+1

Если вы действительно используете bash, ваша линия хэша должна четко сказать. есть разница между bash и sh. sh не выполнит много вещей, которые может сделать bash. ошибка, которую вы получаете, может быть одной из них. например. с bash вы можете сделать ((i ++)) вместо let i = $ i + 1 - но если ваша строка хеш-банга говорит #!/bin/sh, это не сработает, независимо от того, имеет ли ваш скрипт .sh или нет прилагается к его названию. –

+0

Вы правы. Я получаю это сейчас. – user1140656

Смежные вопросы