Страница 1 из 1
Bash: Как из подоболочки достать содержимое массива
Добавлено: 12 май 2009, 17:11
SashaShveik
Код: Выделить всё
#!/bin/sh
declare -a keys # объявил массив
( sed -e 's/...//g' | # выбираю из файла...
grep -v '...' | # нужную мне информацию
awk '{print ($5, $6, $1)}' | sort -n |
while read fkey lkey servname ; do
index=0
while [ "$index" -lt "${#keys[@]}" ] ; do
keys[$index]="$lkey $servname" # каким-то образом заполняю данными массив
let "index = $index + 1"
done
echo "${keys[@]}" # все элементы массива выводятся правильно
done
echo "${keys[@]}" # выводится пустая строка!!!
) < file
echo "${keys[@]}" # выводится пустая строка!!!
Как мне вытащить содержимое массива после внешнего цикла while-do-done?
Re: Bash: Как из подоболочки достать содержимое массива
Добавлено: 13 май 2009, 10:27
Romeo
Какой у тебя именно юниксоид и какой версии? У меня IBM AIX 6.1, на котором этот скрипт работать не хочет (например он не знает что такое declare).
Почему пишешь в теме bash, тогда как по первой строке скрипта видно, что у тебя запускается sh shell?
В общем, если на каком-то юниксоиде такой скрипт работает, то попытаюсь подсказать чисто интуитивно, без возможности проверить сказанное.
По идее после done следует поместить ";" и писать следующее echo в той же строке, или если не хочется в той же, то поместить символ слияния строк "\". Дело в том, что каждая строка скрипта выполняется в своей сессии и объявленная переменная не будет доступна в следующей строке.
Re: Bash: Как из подоболочки достать содержимое массива
Добавлено: 13 май 2009, 14:00
SashaShveik
- debian (версия ядра: 2.6.26-1-amd64), bash 3.2.39(1).
- /bin/sh - это от старой версии скриптов осталось. на самом деле вызывается bash.
- declare - необязательно. этим я хотел показать, что такая ерунда даже если массив объявлять в главном скрипте (не в сабшелле). инструкция declare появилась в bash, начиная с версии 2.
- нет, такой вариант тоже ничего не выводит:
Код: Выделить всё
while ... ; do
...
keys[0]="123"
...
done ; echo "${keys[@]}" ; echo