#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"