UNIX 中变量的数据类型

UNIX 中变量的数据类型

我刚开始阅读 UNIX,遇到了变量定义。根据网站的说法,我指的是直接使用语法定义的 UNIX 变量variable_name=value

我们没有与变量关联的数据类型吗?

答案1

根据 POSIX 标准,环境变量只是没有关联数据类型的纯字符串。

但是,作为扩展,某些 shell(如bashkshksh93zsh其他 shell)允许输入变量类型,例如数字、数组。还可能支持只读变量或预格式化变量。

它们通常使用typesetdeclare内置函数来键入。

以下是整数测试的示例ksh93

$ typeset -i var
$ var=abc
$ echo $var # non numerical -> set to zero
0
$ var=0xffff # hexadecimal
$ echo $var
65535
$ var=0xffffffff
$ echo $var
-1           # ksh93 integers are 32 bit signed
$ var=2147483649
$ echo $var
-2147483647  # overflow

在规则函数的帮助下,ksh93变量可以被赋予任意的自定义类型。

答案2

在 shell 脚本中,只有一种数据类型。一切都是文字。不同的命令可能会以不同的方式解释文本以满足其需要:

$ [ "1" -eq "01" ] && echo yes || echo no
yes
$ [ "1" = "01" ] && echo yes || echo no
no

第一个测试将1和解释01为数字(第二个测试可能解释为八进制数)。第二个测试将它们视为字符串。

相关内容