12.1.1. POSIX shell 兼容性
系统中的许多脚本都可以通过任意 POSIX shell(参见 表 1.13 “shell 程序列表”)来执行。系统的默认 shell 是“/bin/sh
”,它是某个实际 shell 程序的链接。
对
lenny
或更老的系统来说,它是 bash(1)对
squeeze
或更新的系统来说,它是 dash(1)
避免编写具有 bashisms(bash 化)或者 zshisms(zsh 化)语法的 shell 脚本,确保脚本在所有 POSIX shell 之间具有可移植性。你可以使用 checkbashisms(1) 对其进行检查。
表 12.2. 典型 bashism 语法列表
好的:POSIX | 应该避免的:bashism |
---|---|
if [ “$foo” = “$bar” ] ; then … | if [ “$foo” == “$bar” ] ; then … |
diff -u file.c.orig file.c | diff -u file.c{.orig,} |
mkdir /foobar /foobaz | mkdir /foo{bar,baz} |
funcname() { … } | function funcname() { … } |
八进制格式:”\377 “ | 十六进制格式:”\xff “ |
使用 “echo
“ 命令的时候需要注意以下几个方面,因为根据内置 shell 和外部命令的不同,它的实现也有差别。
避免使用除“
-n
”以外的任何命令行选项。避免在字符串中使用转义序列,因为根据 shell 不同,计算后的结果也不一样。
注意 | |
---|---|
尽管“ |
提示 | |
---|---|
如果你想要在输出字符串中嵌入转义序列,用 “ |