Как я могу прочитать пользовательский ввод как массив в оболочке bash
?
Прочтите это, используя:
read -a arr
И для печати используйте:
for elem in ${arr[@]}
do
echo $elem
done
И тот, который не воссоздает массив каждый раз (хотя требует bash 3.1 или новее):
array=()
while IFS= read -r -p "Next item (end with an empty line): " line; do
[[ $line ]] || break # break if line is empty
array+=("$line")
done
printf '%s\n' "Items read:"
printf ' «%s»\n' "${array[@]}"
См. http://mywiki.wooledge.org/BashFAQ/001 [ 111] для более.
И как всегда, чтобы избежать написания ошибок, прочитайте http://mywiki.wooledge.org/BashGuide и избегайте руководств tldp, таких как Руководство по написанию сценариев Advanced bash.
Вот один из способов сделать это:
while read line
do
my_array=("${my_array[@]}" $line)
done
echo ${my_array[@]}
Если вы просто запустите его, он будет продолжать чтение со стандартного ввода, пока вы не нажмете Ctrl + D (EOF). После этого введенные вами строки будут в my_array
. Некоторые могут найти этот код запутанным. Тело цикла в основном говорит my_array = my_array + element
.
Некоторые интересные фрагменты документации:
Расширенное руководство по написанию сценариев содержит большую главу о массивах ]
Страница руководства читается встроенной
15 примеры массивов от thegeekstuff.com