首页 > 解决方案 > typeset -i2 var=2#0 在 bash/korn shell 中是什么意思?

问题描述

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

typeset -i2 var=2#0

我设法知道,typeset您可以指定变量的类型,并且该参数-i2描述了该变量是一个整数,要以基数 2(二进制)解释。但是,我仍然无法理解分配给变量 ( 2#0) 的值是什么意思。

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

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

标签: shksh

解决方案


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

typeset -i2 var=15
echo "$var"

产生二进制值

2#1111

因此,使用该逻辑,您的原始代码会初始化varin binary的值0。如果您使用 as 进行初始化2#1111,那么标志的含义会更有意义。您不能在此语法中使用非基数 2 数字,因为它只会引发语法错误,即像做这样的事情typeset -i2 var=2#15永远不会奏效。

请注意,这在和shelltypeset中都是过时的构造。Using提供了类似的选项等等。如果您在基数 2 中定义一个数字,您可以使用算术运算符kshbashdeclarebash$((..))

var='2#1111'
echo "$(( var ))"
15

但是没有内置的方法可以在bash不使用第三方工具的情况下从十进制中进行 base 2 转换bc

echo 'obase=2;15' | bc
1111

推荐阅读