typeset -i2 var=2#0 在 bash/korn shell 中意味着什么?

What typeset -i2 var=2#0 means in bash/korn shell?

我在 korn shell 脚本中阅读了以下说明:

typeset -i2 var=2#0

我设法知道使用 typeset 可以指定变量的类型,并且参数 -i2 描述变量是一个整数,以基数 2(二进制)解释。 但是,我还是不明白赋给变量的值(2#0)是什么意思。

谷歌搜索我发现像variable#pattern这样的指令意味着模式的出现将从变量的前面删除,但情况似乎并非如此...

编辑:似乎 -in 语法特定于 korn shell (ksh)

typeset-i[n] 语法特定于 ksh,在 bash 中不可用。在您的尝试中,代码 -i2 表示以 base 2 内容表示输出,即作为二进制值。在 ksh93

typeset -i2 var=15
echo "$var"

产生二进制值

2#1111

因此,根据该逻辑,您的原始代码以二进制 0 初始化 var 的值。如果您使用 2#1111 之类的东西进行初始化,那么标志的含义会更有意义。您不能使用此语法使用非基数 2 的数字,因为它只会引发语法错误,即 typeset -i2 var=2#15 之类的操作将永远行不通。

请注意,typesetkshbash shell 中都是过时的结构。使用 declare 提供类似的选项和更多。在 bash 中,您可以对相同的 $((..)) 使用算术运算符,如果您在基数 2

中定义一个数字
var='2#1111'
echo "$(( var ))"
15

但是没有 built-in 方法可以在不使用像 bc

这样的第三方工具的情况下从 bash 中的十进制进行以 2 为底的转换
echo 'obase=2;15' | bc
1111