String 为什么我可以在Bash中添加字符串和Int
c打印出6String 为什么我可以在Bash中添加字符串和Int,string,bash,variables,integer,String,Bash,Variables,Integer,c打印出6 a="5" b=1 c=$((a+b) echo $c c打印出1 bash如何将a=“5”识别为整数?为什么a=“banana”变为0?Bash不知道整数是变量的真正数据类型 算术表达式解析字符串以在内部将其转换为整数 可以将变量声明为整数,如下所示: a="banana" b=1 c=$((a+b)) echo $c 这并不会真正使变量成为整数,它仍然可以作为任何变量使用。但是,这将导致赋值尝试被解释为算术表达式(以及它们包含的值为0的未初始化变量) 例如: declare
a="5"
b=1
c=$((a+b)
echo $c
c打印出1
bash如何将a=“5”识别为整数?为什么a=“banana”变为0?Bash不知道整数是变量的真正数据类型 算术表达式解析字符串以在内部将其转换为整数 可以将变量声明为整数,如下所示:
a="banana"
b=1
c=$((a+b))
echo $c
这并不会真正使变量成为整数,它仍然可以作为任何变量使用。但是,这将导致赋值尝试被解释为算术表达式(以及它们包含的值为0的未初始化变量)
例如:
declare -i var
我不能权威地陈述这一点,但我希望“integer”变量只是一种快捷方式,可以使任何赋值的行为就像它被包含在
$(())
中一样。请参见:a=“5”
与a=5
完全相同。在每种情况下,a都是一个字符串。然后,尝试a=banana;香蕉=9;c=1;echo$((a+c))
@Clicky--declare-pa
将以明确的形式显示a
,其中包括关于它是本地的、全局的、导出的、标记为数组的等等的任何信息——因此如果您想向自己证明a=“5”
和a=5
是相同的,执行每一项操作,然后执行declare-pa
。那么为什么banana=0呢。不是整数的字符串是否默认为0?为什么香蕉+1=1?请更正declare-i
只是糖(这会降低代码的可移植性,但不会提高性能——因此我倾向于建议不要使用糖)。具体地说,它设置的标志是att_integer
——它在变量.c
之外几乎完全没有使用过(如果您好奇的话,可以通过宏integer_p
查找引用)。
a=1
b=2
declare -i var
var=a+b+3
echo $var # Prints 6