![如何在控制台/shell 提示符下扩展变量](https://linux22.com/image/197910/%E5%A6%82%E4%BD%95%E5%9C%A8%E6%8E%A7%E5%88%B6%E5%8F%B0%2Fshell%20%E6%8F%90%E7%A4%BA%E7%AC%A6%E4%B8%8B%E6%89%A9%E5%B1%95%E5%8F%98%E9%87%8F.png)
我们如何扩展变量,即。名称前面有一个“$”,其值内容在 bash readline 上?
答案1
既然你特别提到了 readline,我想你想要一些东西,这样:
$ echo $foo
变成:
$ echo bar
bar
的值在哪里$foo
。
有这个阅读线扩展:
shell-expand-line (M-C-e)
像 shell 一样展开该行。这将执行别名和历史扩展以及所有 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
.