我的 Bash 版本已从 v590 更新至版本 5.2.15(1)-release (i686-pc-linux-gnu)。
我使用 Kubuntu 20.04 和 KNOPPIX 9.1。
readline 变量history-size
可以设置为开启或关闭,可以绑定到键序列(但通常不绑定),并且具有一个值。
该值默认为 的值$HISTSIZE
。
我想检查hist-size
readline 中变量的值,看它是否实际上与$HISTSIZE
shell 中的值相等。
我如何读取变量的值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-size
readline 中变量的值,看它是否实际上与$HISTSIZE
shell 中的值相等。
示例 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
);如果其中一个变量未设置,这应该可以合理地工作。另一方面,$HISTSIZE
being0100
和$readline_history_size
being的情况100
需要算术比较。
HISTSIZE=-1
此外,我在shell 中的测试中注意到,结果确实history-size
在0
readline 中,所以无论如何,您可能应该将某些差异解释为合理的。您可能希望构建更复杂的逻辑来涵盖所有边缘情况。