подстановка переменных с помощью команды ввода

#bash #variables

#bash #переменные

Вопрос:

 #!/bin/sh

own1="jack"
own2="mark"
own3="black"
    read n "insert number [1-3]"
    echo $own{n}
  

целью является замена собственной переменной [1-3] новой переменной n

Ответ №1:

Вы бы использовали косвенную переменную (задокументированную в 4-м абзаце расширения параметров оболочки)

 varname="own$n"
echo "${!varname}"
  

Или в версии bash 4.3 используйте ссылку на имя

 declare -n name="own$n"
echo "$name"
  

Но это намного проще с массивами:

 own=(jack mark black)              # an array with 3 elements
read -p "insert number [1-3] " n   # use `-p` option to set the prompt

# TODO validate n is actually a number in the correct range

# bash arrays are zero-indexed, so
echo "${own[n - 1]}"
  

Для элементов численно индексированного массива индекс является арифметическим выражением.

Однако, чтобы попросить пользователя выбрать один из нескольких вариантов, используйте select команду:

 own=(jack mark black)
PS3="Choose a name: "
select name in "${own[@]}"; do
  [[ -n $name ]] amp;amp; break
done
echo "you chose $name"