微软面试题:为什么 Shell 脚本自动把字符串 10001 当成二进制,输出 17?

注解

这并非是“微软公司”的面试题,而是稣想出来“让人微软”的题。

题目

1
2
3
4
5
6
7
#!/bin/sh
test() {
v='10001';
return $v;
}
test;
echo $?

运行后输出 17(二进制 10001 的十进制 17),解释一下?

解答(2023-01-17 新增)

返回值是个 Byte 呀!10001 是 0x2711,所以被截断为 0x11,那就是 17。即:

10001 mod 256 = 17

本题设置的陷阱正是“二进制 10001 的十进制等于 17”,误导人真有一套。