nonokenak Asked: 2021-11-03 07:06:53 +0800 CST2021-11-03 07:06:53 +0800 CST 2021-11-03 07:06:53 +0800 CST 如何在控制台/shell 提示符下扩展变量 772 我们如何扩展一个变量,即。'$' 前面的名称,它在 bash readline 上的值内容? readline 4 个回答 Voted Best Answer muru 2021-11-03T07:52:44+08:002021-11-03T07:52:44+08:00 既然你特别提到了 readline,我认为你想要这样的东西: $ echo $foo 变成: $ echo bar bar的值在哪里$foo。 有这个 readline 扩展: shell-expand-line (M-C-e) 像 shell 一样展开该行。这将执行别名和历史扩展以及所有 shell 单词扩展(请参阅Shell Expansions)。 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 Whispored2001 2021-11-03T07:16:55+08:002021-11-03T07:16:55+08:00 我不知道我是否正确理解了您的问题,但您可以使用echo打印变量。 LincolnP 2021-11-03T07:22:32+08:002021-11-03T07:22:32+08:00 尝试这个: #!/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" FelixJN 2021-11-03T07:49:07+08:002021-11-03T07:49:07+08:00 我不知道在 期间扩展变量的任何方法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.
既然你特别提到了 readline,我认为你想要这样的东西:
变成:
bar
的值在哪里$foo
。有这个 readline 扩展:
M-C-e
通常是Esc Ctrl+e或Alt++ Ctrl。e但是,这也扩展了其他所有内容,例如命令替换、算术扩展等。所以这个:
变成:
我不知道我是否正确理解了您的问题,但您可以使用echo打印变量。
尝试这个:
我不知道在 期间扩展变量的任何方法
read
,但如果存储的字符串没有引用变量名,您可以在不更改结果的情况下评估它:请注意
eval
可能存在的危险,因为它还运行存储为变量的任何命令。出于安全原因,我强烈建议坚持使用envsubst
.