Unix 编程:挑战与局限
1. 参数替换与chdir命令的怪癖
在 Unix 环境中,参数替换是一个重要的操作。当我们使用${1+“$@”}时,如果至少存在一个参数,就会将所有参数(“$@”)进行替换,并且保留每个参数内的所有空格等信息。若仅使用“$@”,在没有调用参数的情况下,它会被替换为空参数“”,但我们期望在这种情况下不重现任何参数。而$*在双引号内时,位置参数会被替换并引用,以带引号的空格分隔(“$1 $2 …”);$@在双引号内时,位置参数同样被替换并引用,但以不带引号的空格分隔(“$1” “$2” …)。据说${1+“$@”}的兼容性可以追溯到 “Version 7 Unix”。
chdir命令(通常用cd表示)也存在一些奇怪的行为。例如,当我们执行cd ftp,如果当前目录/home/ar/alan下有一个名为ftp的子目录,那么新的当前目录就会变成/home/ar/alan/ftp。每个目录都有两个特殊条目:.表示当前目录本身,..表示父目录,所以我们可以通过cd .