我可以看到很多地方解释如何在打印出来时如何在十六进制数和十进制数之间进行转换。我不想打印它,我想在命令中使用十六进制值。
currentAdress=$((0x$currentAdress + 8))
# read the max_payload
maxPayloadCmd="sudo /sbin/setpci -d $vendorId:$deviceId $currentAdress.B"
maxPayload=`eval $maxPayloadCmd`
currentAdress
的值是00
到FF
范围内的一个字符串
当我打印maxPayloadCmd
时,我可以看到我有小数值,而不是hexvalue
。
我该如何解决这个问题?
您可以使用printf
和%x
以十六进制格式打印值。
maxPayloadCmd="sudo /sbin/setpci -d $vendorId:$deviceId $(printf '%02x.B' $currentAdress)"
顺便说一下,将命令存储在函数而不是变量中更自然。你应该avoid eval一般。
maxPayload() {
sudo /sbin/setpci -d "$vendorId:$deviceId" "$(printf '%02x.B' "$currentAdress")"
}
# Call the function the same as any other command.
maxPayload
这可能取决于您打印变量的方式:
$ currentAdress=2
$ currentAdress=$((0x$currentAdress + 8))
$ printf "%d\n" $currentAdress
10
$ printf "%x\n" $currentAdress
a