我们如何扩展变量,即。名称前面有一个“$”,其值内容在 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
.