如何在控制台/shell 提示符下扩展变量

如何在控制台/shell 提示符下扩展变量

我们如何扩展变量,即。名称前面有一个“$”,其值内容在 bash readline 上?

答案1

既然你特别提到了 readline,我想你想要一些东西,这样:

$ echo $foo

变成:

$ echo bar

bar的值在哪里$foo

这个阅读线扩展

shell-expand-line (M-C-e)
像 shell 一样展开该行。这将执行别名和历史扩展以及所有 shell 单词扩展(请参阅外壳扩展)。

M-C-e通常是Esc Ctrl+eAlt++ Ctrle

然而,这也扩展了其他所有内容,例如命令替换、算术扩展等。因此:

$ 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.

相关内容