сохранение пользовательских значений в массиве с последующим сравнением этих переменных с использованием bash - PullRequest
0 голосов
/ 06 февраля 2020
while read line

do

 if [ $line -ge $zero ]

 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

что не так? он выдает эту ошибку:

a [1]: команда не найдена

a [2]: команда не найдена

a [3]: команда не найдена выполнена

1 Ответ

1 голос
/ 06 февраля 2020

С самого начала

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...