【问题标题】:Why Can I add a String and a Int in Bash为什么我可以在 Bash 中添加一个字符串和一个 Int
【发布时间】:2017-09-13 13:33:32
【问题描述】:
a="5"
b=1
c=$((a+b)
echo $c

c 打印出 6

a="banana"
b=1
c=$((a+b))
echo $c

c 打印出 1

bash 如何将 a="5" 识别为整数?为什么 a="banana" 会变成 0?

【问题讨论】:

  • a="5"a=5完全相同。在每种情况下,a 都是一个字符串。
  • 然后,试试a=banana; banana=9; c=1; echo $((a + c))
  • @Clicky -- declare -p a 将以明确的形式显示a,其中包括有关它是本地的、全局的、导出的、标记为数组等的任何信息——所以如果你想向自己证明a="5"a=5 是相同的,执行它们中的每一个,然后执行declare -p a
  • 那么为什么banana = 0。不是整数的字符串是否默认为0?为什么香蕉 + 1 = 1?

标签: string bash variables integer


【解决方案1】:

Bash 对整数作为变量的真正数据类型一无所知。

算术表达式在内部解析字符串以将它们转换为整数。

您可以将变量声明为整数,如下所示:

declare -i var

这不会真正使变量成为整数,它仍然可以用作任何变量。但是,它会导致赋值尝试被解释为算术表达式(以及它们包含的未初始化变量的值为 0)。

例如:

a=1
b=2
declare -i var
var=a+b+3
echo $var # Prints 6

我不能权威地说明这一点,但我希望“整数”变量只是一种捷径,可以让任何赋值行为都像包含在 $(()) 中一样。

【讨论】:

  • 更正declare -i 只是糖(使代码的可移植性降低,但不会提高性能——所以我倾向于建议不要使用它)。具体来说,它设置的标志是att_integer——在variables.c之外几乎完全没有使用。
  • (如果你好奇的话,请通过宏 integer_p 查找参考资料)。
猜你喜欢
  • 1970-01-01
  • 2014-07-30
  • 2013-02-05
  • 2022-08-18
  • 2012-10-17
  • 1970-01-01
  • 2014-03-04
相关资源
最近更新 更多