Пользовательский ввод для поиска в массиве bash

Не все переменные оболочки помечены как экспортированные, как вы можете видеть в выводе declare -p.

Нет смысла для bashпомечать $_как экспортируемую, потому что это автоматически добавляет эту переменную в окружение дочерних процессов , но с другим значением, чем то, которое она имеет в оболочка (в этот момент ).

Отображение его как экспортированного просто запутает пользователя в отношении того, что произойдет со средой внешних команд.

Все "переменные времени выполнения" BASH*не экспортируются.

0
17.02.2020, 06:16
1 ответ

Это можно сделать, используя ссылки на имена или косвенные переменные, но вам следует использовать ассоциативные массивы. Нет необходимости в переменных для каждой записи, когда для всего набора подойдет ассоциативный массив.

declare -A books
books[buffa7]="Wilson, Buffa, Lou. Physics. Pearson, 7th edition, 2009. ISBN: 0321601831"
books[giancoli6]="Giancoli, Douglas C. Physics: Principles with Applications. Prentice Hall, 6th edition. ISBN: 0321736990"

Тогда:

read input
source=${books[$input]}   # set $source to entry from array
if [[ -z $source ]]       # if $source is empty after that
then                      # $input was not in array, so
    source=$input         # set $source to $input.
fi
2
28.04.2021, 23:23

Теги

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