在 Bash 中,如何读取名为“history-size”的 readline 变量的值?

在 Bash 中,如何读取名为“history-size”的 readline 变量的值?

我的 Bash 版本已从 v590 更新至版本 5.2.15(1)-release (i686-pc-linux-gnu)。

我使用 Kubuntu 20.04 和 KNOPPIX 9.1。

readline 变量history-size可以设置为开启或关闭,可以绑定到键序列(但通常不绑定),并且具有一个值。

该值默认为 的值$HISTSIZE

我想检查hist-sizereadline 中变量的值,看它是否实际上与$HISTSIZEshell 中的值相等。

我如何读取变量的值hist-size

早些年我曾使用过“Readline Library”,但现在无法使用它了。而且互联网上也没有与此相关的文章。

答案1

在 Bash 中bind有一个与 readline 对话的接口。help bind打印(以及其他行):

-v          以可重复用作输入的形式列出变量名称和值。

这意味着您可以使用bind -v。您感兴趣的行如下所示:

set history-size 50000

您可以使用以下方式提取值awk

bind -v | awk '/^set history-size / {print $3;}'

我想检查hist-sizereadline 中变量的值,看它是否实际上与$HISTSIZEshell 中的值相等。

示例 shell 代码:

readline_history_size="$(bind -v | awk '/^set history-size / {print $3;}')"
if [ "$readline_history_size" = "$HISTSIZE" ]; then
   echo yes
else
   echo no
fi

注意,我特意使用了字符串比较 ( =),而不是算术比较 ( -eq);如果其中一个变量未设置,这应该可以合理地工作。另一方面,$HISTSIZEbeing0100$readline_history_sizebeing的情况100需要算术比较。

HISTSIZE=-1此外,我在shell 中的测试中注意到,结果确实history-size0readline 中,所以无论如何,您可能应该将某些差异解释为合理的。您可能希望构建更复杂的逻辑来涵盖所有边缘情况。

相关内容