Wie erweitern wir eine Variable, d. h. einen mit „$“ vorangestellten Namen, in der Bash-Readline auf ihren Wertinhalt?
Antwort1
Da Sie Readline ausdrücklich erwähnen, denke ich, dass Sie Folgendes möchten:
$ echo $foo
wird:
$ echo bar
wobei bar
der Wert von ist $foo
.
Es gibtdiese Readline-Erweiterung:
shell-expand-line (M-C-e)
Erweitern Sie die Zeile wie die Shell. Dies führt die Alias- und Verlaufserweiterung sowie alle Shell-Worterweiterungen durch (sieheShell-Erweiterungen).
M-C-e
wäre normalerweise Esc Ctrl+ eoder Alt+ Ctrl+ e.
Allerdings wird dadurch auch alles andere erweitert, wie Befehlsersetzungen, arithmetische Erweiterungen usw. Also Folgendes:
$ echo $SHELL $(date) $((11+22))
wird:
$ echo /bin/zsh Wed 3 Nov 00:52:09 JST 2021 33
Antwort2
Ich weiß nicht, ob ich Ihre Frage richtig verstanden habe, aber Sie können eine Variable ausdrucken mitEcho.
Antwort3
Versuche dies:
#!/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"
Antwort4
Mir ist keine Möglichkeit bekannt, eine Variable während zu erweitern read
, aber man kann sie nachträglich auswerten, ohne das Ergebnis zu ändern, wenn der gespeicherte String nicht auf einen Variablennamen verweist:
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
Beachten Sie die eval
möglichen Gefahren, da auch als Variable gespeicherte Befehle ausgeführt werden. Aus Sicherheitsgründen empfehle ich daher dringend, bei zu bleiben envsubst
.