15. Coding Style
本章记录了在实时系统中使用的编码风格。
15.1 Compatibility
-
避免“bashisms”,代码库必须是POSIX兼容的,因此是普遍兼容的。
-
此外,它必须符合当前Debian策略所选择的POSIX规范的版本。
-
你可以用’sh -n’和’checkbashisms’检查你的脚本。
-
确保所有shell代码都使用’set -e’运行。
15.2 Indenting
-
总是在空格上使用制表符。
-
保持case分支终止符(“;;”)与分支的”content”对齐,而不是与分支的”entry”对齐。
好的:
case "${1}" in
foo)
foobar
;;
bar)
foobar
;;
esac
15.3 Wrapping
-
一般来说,每行最多应该有80个字符。
-
像then和do这样的关键字的位置应该根据混乱和可读性进行良好的判断。特别是对于一小段代码,最好将它们与与之相关的前一个关键字放在同一行(if;为;等等)。只放置在下一行,这样做是有意义的;通常,这可能只是为了遵守最大行长度限制。它们总是应该放在下一行的一种情况是,它们后面的内容被分解成多行,因此它在新的一行上,可以在它和后面的代码体之间创建明确的分离。例如:
首选:
if foo; then
bar
fi
for FOO in $ITEMS; do
bar
done
if [ "${MY_LOCATION_VARIABLE}" = "something" ] && [ -e "${MY_OUTPUT_FILE}" ]
then
MY_OTHER_VARIABLE="$(some_bin ${FOOBAR} | awk -F_ '{ print $1 }')"
fi
if [ "${MY_FOO}" = "something" ] && [ -e "path/${FILE_1}" ] ||
[ "${MY_BAR}" = "something_else" ] && [ ${ALLOW} = "true" ]
then
foobar
fi
不太理想:
if [ "${MY_LOCATION_VARIABLE}" = "something" ] && [ -e "${MY_OUTPUT_FILE}" ]; then
MY_OTHER_VARIABLE="$(some_bin ${FOOBAR} | awk -F_ '{ print $1 }')"
fi
可怕的:
if [ "${MY_LOCATION_VARIABLE}" = "something" ] && [ -e "${MY_OUTPUT_FILE}" ] || [ "${MY_LOCATION_VARIABLE}" = "something-else" ] && [ -e "${MY_OUTPUT_FILE_2}" ]; then
MY_OTHER_VARIABLE="$(some_bin ${FOOBAR} | awk -F_ '{ print $1 }')"
fi
- 建议将函数的开始大括号放在新行上(为了与已建立的风格保持一致),并保持大括号与函数名对齐:
好的:
Foo ()
{
bar
}
坏的(与现有风格不一致):
Foo () {
bar
}
可怕的:
Foo ()
{
bar
}
15.4 Variables
-
变量总是大写的。
-
在live-build中使用的配置变量应该以 LB_ 前缀开头。
-
局部函数变量应该限制在局部范围内。
-
live-config中与启动参数相关的变量以 LIVE_ 开头。
-
live-config中的所有其他变量都以 _ 前缀开头。
-
使用大括号括住变量;例如,写${FOO}而不是$FOO。
-
总是用引号保护变量,以尊重潜在的空白(除非需要实现正确的分词):写”${FOO}”而不是${FOO}。
-
出于一致性的考虑,在给变量赋值时总是使用引号:
坏的:
FOO=bar
好的:
FOO="bar"
- 如果使用多个变量,最好引用完整的表达式:
典型坏的:
if [ -f "${FOO}"/foo/"${BAR}"/bar ]; then
foobar
fi
好的:
if [ -f "${FOO}/foo/${BAR}/bar" ]; then
foobar
fi
15.5 Miscellaneous
-
在调用sed时,建议使用” “(不带环绕引号)作为分隔符。”sed -e ‘s foo bar ’“(不含””)。 -
不要使用test命令进行比较或测试,使用”[” 和 “]”(不带””);如。”if [ -x /bin/foo ]; …“而不是”if test -x /bin/foo; …“。
-
用例:它使代码比条件检查更可读(if foo;…并在没有实际if关键字的情况下进行测试,例如[ -e “${FILE}” ] exit 0)。 - 使用”Foo_bar”样式的函数名,即首字母大写,然后全部小写,并合理使用下划线以提高可读性。