Как я могу прочитать пользовательский ввод как массив в Bash?

Я написал сценарий специально для решения этой проблемы. Этот скрипт (который основан на python и D-Bus) будет подключать эмпатию к сети каждый раз, когда сеть будет в сети. Даже если соединение опустится и снова подключится, сценарий автоматически снова подключит эмпатию.

Надеюсь, вам понравится. Пожалуйста, оставьте комментарий, если вам нужны какие-либо улучшения.

10
задан 11 March 2019 в 06:43

4 ответа

Прочтите это, используя:

read -a arr

И для печати используйте:

for elem in ${arr[@]}
do 
  echo $elem
done
0
ответ дан 11 March 2019 в 06:43

И тот, который не воссоздает массив каждый раз (хотя требует 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.

0
ответ дан 11 March 2019 в 06:43

Как насчет этой однострочной;)

0
ответ дан 11 March 2019 в 06:43

Вот один из способов сделать это:

while read line
do
    my_array=("${my_array[@]}" $line)
done

echo ${my_array[@]}

Если вы просто запустите его, он будет продолжать чтение со стандартного ввода, пока вы не нажмете Ctrl + D (EOF). После этого введенные вами строки будут в my_array. Некоторые могут найти этот код запутанным. Тело цикла в основном говорит my_array = my_array + element.

Некоторые интересные фрагменты документации:

0
ответ дан 11 March 2019 в 06:43

Другие вопросы по тегам:

Похожие вопросы: