Как расширить переменную в консоли/оболочке

Как расширить переменную в консоли/оболочке

Как расширить переменную, т. е. имя с предшествующим символом «$», до ее значения в bash readline?

решение1

Поскольку вы конкретно упомянули readline, я думаю, вы хотите что-то вроде этого:

$ echo $foo

становится:

$ echo bar

где bar— значение $foo.

Естьэто расширение readline:

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.

Связанный контент