Как расширить переменную, т. е. имя с предшествующим символом «$», до ее значения в bash readline?
решение1
Поскольку вы конкретно упомянули readline, я думаю, вы хотите что-то вроде этого:
$ echo $foo
становится:
$ echo bar
где bar
— значение $foo
.
shell-expand-line (M-C-e)
Расширьте строку, как это делает оболочка. Это выполняет расширение псевдонима и истории, а также все расширения слов оболочки (см.Расширения Shell).
M-C-e
обычно будет Esc Ctrl+ eили Alt+ Ctrl+ e.
Однако это также расширяет все остальное, например, подстановку команд, арифметическое расширение и т. д. Итак, это:
$ echo $SHELL $(date) $((11+22))
становится:
$ echo /bin/zsh Wed 3 Nov 00:52:09 JST 2021 33
решение2
Не знаю, правильно ли я понял ваш вопрос, но вы можете вывести переменную, используяэхо.
решение3
Попробуй это:
#!/bin/bash
DEFAULT_VALUE="default-value"
read -e -p $'\e[33mEnter variable name\e[0m: ' -i "$DEFAULT_VALUE" NEW_VAR
echo "New value for variable is: $NEW_VAR"
решение4
Я не знаю способа раскрыть переменную во время выполнения read
, но вы можете вычислить ее впоследствии, не изменяя результат, если сохраненная строка не ссылается на имя переменной:
read -e variable
$SHELL
echo $valiable
$SHELL
eval echo $variable
/bin/bash
echo $variable | envsubst
/bin/bash
read -e n
hello
echo $n
hello
eval echo $n
hello
echo $n | envsubst
hello
Будьте в курсе возможных опасностей, eval
поскольку он также запускает любые команды, сохраненные как переменные. По соображениям безопасности я настоятельно рекомендую придерживаться envsubst
.