gpt4 book ai didi

bash - 为什么字符串在 bash 测试中等于零

转载 作者:行者123 更新时间:2023-11-28 20:21:49 24 4
gpt4 key购买 nike

我有一个数组,我用它来生成一个列表,用户可以像这样从中选择。

list=(a b c d)
n=0
for x in ${list[@]}
do echo $n\)$x
n=$((n++)
done
read -p "Pick an item:" choice

我只想允许选择有效的选项,所以我正在这样检查。

if [[ $choice -gt ${#list[@]} && $choice -lt -1 ]]
then ...
else
echo "not a valid choice"

我遇到的问题是所有字符串的计算结果都为零。即 [[ "I am a duck"-eq 0 ]] 为真,(( "I am a duck"== 0 )) 也是如此。有没有办法让所有的字符串和数字比较结果都为假?我知道我可以使用 [[ $choice =~ [A-Za-z]+ ]] 检查字符串,但我想知道是否有没有正则表达式的方法?

编辑对不起,我应该先测试一下“我是鸭子”的说法才放下的。它不喜欢空格。但是,“I_am_a_duck”的计算结果确实为 0。下面的 chepner 解释了这一点。

最佳答案

-gt,因为它旨在比较整数,所以会触发与算术表达式中字符串相同的行为:字符串被视为参数的名称,并且该参数被扩展(如有必要,重复该过程)直到你得到一个整数。如果没有该名称的参数,则替换为 0。

就是说,您可以通过从 1 开始为项目编号并使用 来解决问题

if (( choice < 1 || choice > ${#list[@]} )); then
echo "not a valid choice"

从现在开始,任何非整数输入都将被视为 0,这确实小于下限 1。

关于bash - 为什么字符串在 bash 测试中等于零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54677124/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com