LINUX.ORG.RU

bash. массивы. не понятка с размером массива.


0

1

имеется такой код:

var=0
arr=(
	\""str 1\""
	\""str 2\""
	$(
		if [[ $var == 1 ]]; then
			echo \""str 3\""
			echo \""str 4\""
		else
			echo \""str 5\""
			echo \""str 6\""
		fi
	)
	\""str 7\""
)

arr2=(
	\""str 1\""
	\""str 2\""
)

echo ${arr2[@]}
echo ${#arr2[@]}

echo ${arr[@]}
echo ${#arr[@]}

http://ideone.com/pJjhd

вывод:

«str 1» «str 2»

2

«str 1» «str 2» «str 5» «str 6» «str 7»

7

вопрос в том, почему для массива arr2 размер определяется правильно, а для arr - нет? ведь в втором случае размер должен быть пять.

благодарен.

★★★
Ответ на: комментарий от niXman

а почему в первыми двумя элементами этого не происходит?

тоже-самое:

└─■ bash arr.sh 
"str 1" "str 2"
2
"str 1" "str 2" "str 3" "str 4" "str 7"
7
hope13 ★★★
()
Ответ на: комментарий от niXman

а, ну так это из-за echo. И потом вся конструкция(3,4 или 5,6) оказываются в одной переменной. Но баш зачем-то разбирает её на несколько. Не знаю почему.

hope13 ★★★
()
Ответ на: комментарий от niXman

по сабжу - у тебя в коде ошибка. ты пытаешься выполнить „str“. Но никому не могло придти в голову засунуть ошибочный код внутрь определения массива. Пиши багрепорт.

И не кури больше ЭТОТ «чай».

drBatty ★★
()
Ответ на: комментарий от niXman

да, условие можно убрать

достаточно

arr=( $( echo \""str 5\"" ) )
drBatty ★★
()
Ответ на: комментарий от niXman

Распечатать массив по элементам (через цикл) и тогда будет видно, почему 7 элементов.

mky ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.