С самого начала
if [ $line -ge $zero ]
какой тип данных должен быть в $line
? -ge
используется при сравнении цифр c. Если $line
является строкой, используйте =
или если вы просто хотите проверить, не является ли она пустой, используйте этот синтаксис if [[ "$line" ]]
Далее.
a+=($line)
Опять же, если $line
- строка, то вы следует заключить в "", как это, строка a + = ("$ line") может содержать пробелы. Для l oop.
for i in ${a[@]}
do
echo $(a[$i]) ## here I am trying to print them
Здесь вы используете синтаксис for i in ${a[@]}
будет перебирать значения массивов, а не индексы. И снова, если значения являются строками, используйте "" вот так for i in "${a[@]}"
Так что echo $(a[$i])
не будет работать по двум причинам. Во-первых, вы должны использовать {} здесь, например, echo ${a[$i]}
, второе $i
не является индексом, но оно может действительно работать, если это di git, но неправильно. Так что здесь вам нужно просто echo $i
coz $i
- это значение из массива a
. Или переписать для l oop.
for i in ${!a[@]}
do
echo ${a[$i]} ## here I am trying to print them
done
И последнее, но не менее важное: в конце этого сценария нет done
или это только часть? Так в и должно выглядеть так.
while read line; do
if [[ $line ]]; then
a+=( "$line" ) ##here I am attempting to store the values in an array
else
for i in ${!a[@]}; do
echo ${a[$i]} ## here I am trying to print them
done
fi
done < data.txt
echo ${a[@]} # print rusult