Как сохранить непрерывный номер в массиве, bash сценариев? - PullRequest
0 голосов
/ 14 марта 2020

Легко объявить и сохранить число в массиве, но проблема в том, что пользователь вводит 1234, и я хотел сохранить эти числа как $ array [0] = 1, $ array [1] = 2, $ array [ 2] = 3, $ array [3] = 4, но вместо этого на самом деле происходит следующее: $ array [0] = 1234, $ array [1] = null, $ array [2] = null, $ array [3] = null , Я не знаю, как хранить каждый номер отдельно

#!/bin/bash
declare -a key
read -p "Enter the encryption key: " numbers
key=($numbers)
echo ${key[0]} 
echo ${key[1]}
echo ${key[2]}
echo ${key[3]}.

Фактический вывод:

Введите ключ шифрования: 1234

1234

null

null

null

Желаемый вывод:

Введите ключ шифрования: 1234

1

2

3

4

Заранее спасибо:)

Ответы [ 3 ]

1 голос
/ 14 марта 2020

Существует также возможность использовать

key=(`grep -o . <<< "$numbers"`)

И вы можете получить доступ к различным буквам в $ числах, не создавая массив, используя запись подстроки ${string:initial_index:length_of_substring}:

echo ${numbers:0:1}
echo ${numbers:1:1}
echo ${numbers:2:1}
echo ${numbers:3:1}
0 голосов
/ 14 марта 2020

Видя, как вы используете read, так что вы уже предполагаете, что в ключе нет пробелов, вы можете сделать это:

#!/bin/bash
declare str
read -p "Enter the encryption key: " str

# replace each character with that character + space
spaced=$(echo "$str" | sed 's/\(.\)/\1 /g')

# without quotes, array elements will be each of the space-separated strings
numbers=( $spaced )

printf "array element %s\n" "${numbers[@]}"

Вывод:

Enter the encryption key: hello123
array element h
array element e
array element l
array element l
array element o
array element 1
array element 2
array element 3
0 голосов
/ 14 марта 2020

Можно попробовать.

declare -a key
read -p "Enter the encryption key: " numbers
while read -n1 input; do
  key+=("$input")
done < <(printf '%s' "$numbers")

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