我刚开始阅读 UNIX,遇到了变量定义。根据网站的说法,我指的是直接使用语法定义的 UNIX 变量variable_name=value
。
我们没有与变量关联的数据类型吗?
答案1
根据 POSIX 标准,环境变量只是没有关联数据类型的纯字符串。
但是,作为扩展,某些 shell(如bash
、ksh
、ksh93
和zsh
其他 shell)允许输入变量类型,例如数字、数组。还可能支持只读变量或预格式化变量。
它们通常使用typeset
或declare
内置函数来键入。
以下是整数测试的示例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
为数字(第二个测试可能解释为八进制数)。第二个测试将它们视为字符串。