So erweitern Sie eine Variable in der Konsole/Shell-Eingabeaufforderung

So erweitern Sie eine Variable in der Konsole/Shell-Eingabeaufforderung

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 barder 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-ewä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 evalmöglichen Gefahren, da auch als Variable gespeicherte Befehle ausgeführt werden. Aus Sicherheitsgründen empfehle ich daher dringend, bei zu bleiben envsubst.

verwandte Informationen