我认为应该使用除C Shell外的其他选项,因此我建议在Linux上使用Bash,在其他平台上使用Korn shell(除非也安装了Bash)。
就像编辑器一样(你喜欢vim还是emacs),选择shell部分是熟悉度和偏好的问题。有很多人喜欢C shell,但我相信它不如Bourne shell及其衍生版本易于编程。我的.cshrc实际上等同于exec /bin/ksh(它不完全相同,因为我想执行登录shell-读取配置文件等),但如果有人使用C shell或其衍生版本,我不会谴责他们,只要这是一个知情的决定。
如果您决定使用除C shell之外的其他内容,则基本上属于Bourne shell阵营,对于该阵营,POSIX标准或多或少地指定了预期行为,然后不同的shell-也就是Bourne、Korn或Born Again shell-添加(或在经典的Bourne shell的情况下减去)一些功能。如果您的代码可能需要从Linux移动到HP-UX、Solaris或AIX(经典的AT&T衍生Unix变体的三个幸存者),则应考虑确保您将shell脚本编写为经典的Bourne shell,尽管Korn shell也相当安全。但请注意,在Linux上,您可以编写#!/bin/sh并获得Bash,在其他平台上,您将获得Bourne shell。
我在Korn shell和Bash之间切换,没有遇到大问题-很少有小问题。我倾向于避免那些未定义的语言角落-这往往意味着“在两者中定义”。对于那些使用Linux的人来说,另一个问题是GNU工具比经典Unix版本具有更多选项,您可能会因为使用命令选项而失去可移植性,而不是因为使用的shell编程结构。经验丰富并随时访问其他系统的手册页面会极大地帮助。