我有一些输入值(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
我不确定是否清楚,但我目前在这个面具问题上遇到了阻止。
提前感谢
答案 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
我希望更有用的功能不需要文件中的值;顺便提一下,这也说明了如何将它们放在这里的文档中(我做了一些奇怪的事情,不必更改函数的那些部分)。