Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 为什么我可以在Bash中添加字符串和Int_String_Bash_Variables_Integer - Fatal编程技术网

String 为什么我可以在Bash中添加字符串和Int

String 为什么我可以在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

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 -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