bash编程习惯。准确点。
发表于 : 2012-08-28 16:00
- #!/bin/bash。在其他*nix上,可以#!/usr/bin/env bash。不要#!/bin/sh。有些人(谁?比如@chenfengyuan
。)非要用(纯)POSIX的方式写shell。其实坑的是你自己。
- 见到$,就要加引号。特意要拆开的除外。不然如果里边有空格,很可能造成异常。如果里边有就肯定会出问题了。
代码: 全选
()|<>&!#`\;
- 用"$()",不要"``"。``不方便嵌套。你想,要是只用``写3层获取输出,还不转义得累死 。$($($())),简单省事。
代码: 全选
`\`\\\`\\\`\``
虽然得到正确结果,而且移植性巨高。。。但是代码: 全选
● sh -c '`\`\\\`echo echo echo echo echo\\\`\``' echo
- 在脚本里,不要alias。如果一定有需求,就function foo () { bar "$@"; }。alias可能不起作用。
- *NO* cat |grep, cat|sed, cat|awk。比效率,处理万行码就知道了。
grep text file, sed -e expression file, awk 'script' file。 - bash自己能作的事情,尽量不要调用外部程序。正则除外(bash自己的似乎效率不高)。简单的比如${foo#bar}${foo%bar},就不要费劲sed了.
- 按行获取文件用while read line ; do something ; done <file。不要for i in `cat file`; do something ; done。如果文件一行内有空格,那这一行就会被拆成两次循环。
- 不要更改IFS。容易造成混乱。
- 数组,获取全部元素用"${foo[@]}"(有引号,注意括起来的是每个元素。不是整个数组。),不要。"$@"同理。添加元素可以考虑用foo+=(something)或者foo=("${foo[@]}" something)的形式。
代码: 全选
${foo[*]}

全文循 知识共享 署名-相同方式共享。