Странный результат с моим массивом внутри цикла while в bash - PullRequest
0 голосов
/ 01 июля 2019

Я хотел бы заполнить простой массив в bash внутри цикла while.

Я пытаюсь сделать это:

read -p " Value : " nb

declare -a array

while [[ $nb != "s" ]]
do
    read -p " Value : " nb
    array+=("$nb")
done

echo ${array[@]}

Если я попытаюсь с 1,2,3,4и 5 как значения, вывод:

Value : 1
Value : 2
Value : 3
Value : 4
Value : 5 ( to stop the loop and display the array )
2 3 4 5 s

Или я хочу получить этот вывод:

Value : 1
Value : 2
Value : 3
Value : 4
Value : 5
Value : s 
1 2 3 4 5

Можете ли вы сказать мне, что не так в моем сценарии?

Ответы [ 2 ]

1 голос
/ 01 июля 2019

Две строки кода внутри цикла while должны быть заменены.

read -p " Value : " nb

declare -a array

while [[ $nb != "s" ]] do
    array+=("$nb")
    read -p " Value : " nb
done
echo ${array[@]}

Теперь ваше первое чтение помещается в ваш массив, а ваше последнее чтение (для выхода из цикла) не помещается в массив.

0 голосов
/ 01 июля 2019

Ваш первый read не добавляет входные данные в ваш массив. Так что просто держите ваш read внутри цикла while. Затем добавляйте входные данные в массив, только если они не равны s.

declare -a array

while [[ $nb != "s" ]]; do 
  read -p "Value: " nb
  if [[ $nb != "s" ]]; then 
    array+=($nb)
  fi 
done 

echo ${array[@]}

Обновление: краткий синтаксис, благодаря комментарию Чарльза Даффи.

declare -a array

while :; do 
  read -p "Value: " nb
  [[ $nb == s ]] && break
  array+=($nb)
done 

echo ${array[@]}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...