对变量执行掩码

时间:2014-11-25 10:52:33

标签: bash shell variables

我有一些输入值(32位无符号整数),在文件中定义如下,及其相关的标识符:

var=0x000000001
var1=0x000000002
var2=0x000000004
var3=0x000000008
toto=0x000000010
titi=0x000000020
tata=0x000000040   
toto1=0x000000080  
toto2=0x000000100
toto3=0x000000200
titi2=0x000000400
titi3=0x000000800   
tito0=0x000001000
tito1=0x000002000
tito2=0x000004000
tito3=0x000008000
tito4=0x000010000

我想实现第二个函数名GetConfig(),它必须返回一个uint32值。根据这个值,我会引用相关的变量。如果我输入300,我应该显示toto2 toto3。

function Config()
{
vartest=$1

    if [ -f $file ]; then
        while read lines  
        do  
            value=${lines##*=}
            mask=$(($vartest & $value))
            echo $mask
        done < $file
    else
        exitError 101
    fi  
}

如果我输入./script Config 3840,我会获得:

0
0
0
0
0
0
0
0
256
512
1024
2048
0
0
0
0
0

我可以很容易地显示toto2 toto3 titi5 titii,但如果我输入./script Config 4812,我会获得:

0
0
4
8
0
0
64
128
0
512
0
0
4096
0
0
0
0

这个结果不能让我显示var1 titi titii test1

我不确定是否清楚,但我目前在这个面具问题上遇到了阻止。

提前感谢

1 个答案:

答案 0 :(得分:1)

您的问题陈述不是很清楚,但我希望这段代码可以帮助您重回正轨。真正的好处是使用${lines%=*}来获取与此lines中的值对应的键。

Config() {
    vartest=$1
    if [ -f $file ]; then
        while read lines
        do
            value=${lines##*=}
            test $(($vartest & $value)) = 0 && continue
            echo "${lines%=*}"
        done < $file
    else
        exitError 101
    fi
}

file=/dev/stdin
Config 3840 <<':'
    var=0x000000001
    var1=0x000000002
    var2=0x000000004
    var3=0x000000008
    toto=0x000000010
    titi=0x000000020
    tata=0x000000040
    toto1=0x000000080
    toto2=0x000000100
    toto3=0x000000200
    titi2=0x000000400
    titi3=0x000000800
    tito0=0x000001000
    tito1=0x000002000
    tito2=0x000004000
    tito3=0x000008000
    tito4=0x000010000
:

试运行:

toto2
toto3
titi2
titi3

我希望更有用的功能不需要文件中的值;顺便提一下,这也说明了如何将它们放在这里的文档中(我做了一些奇怪的事情,不必更改函数的那些部分)。