扩展名为 bash 和 sh 的文件

扩展名为 bash 和 sh 的文件

bash我对带有和扩展名的文件进行了一些研究sh。大多数人和资源都说,如果文件有bash扩展名,那么它就包含bash脚本。同样,带有扩展名的文件sh包含sh脚本。

但是,我找不到 bash 和 sh 脚本之间的区别。有一些旨在教人们在 shell 上编写脚本的课程和文章,它们的标题都是shell scripting

在这一点上,shell脚本对应的是哪一个呢?

Bash 脚本或 Sh 脚本。

我试图了解 bash 和 sh 脚本之间的区别是什么。

答案1

POSIXland 中的文件名没有“扩展名”。文件名中的A.与任何其他字符没有什么不同,除了我们这样的肉包可能赋予它们的含义之外,没有特定的含义。

一个可以希望任何名称以 结尾的文件.bash都是要通过 shell 执行的脚本bash,但不能保证这一点。

事实上,给予全部shell 脚本的后缀.sh是无论其使用哪个解释器,如 shebang 行应该正确指定应使用哪个 shell 来执行此类文件。

shbash是两个不同但相关的 shell;其中两个,例如kshcshzshfishashdash以及更多其他。

每个 shell 都有自己的语法、功能、习惯和缺点;有些 shell 在很大程度上彼此兼容(通常为任何脚本编写的sh也可以在或许多其他 shell 中运行bash),但有些则不然。

答案2

我日常发现的唯一重要问题bashsh比较运算符。在bash双等于运算符中==可用于字符串比较:

if [ "$var" == "foo" ]; then  # bash

但这sh是一个语法错误,因为它需要单个等于。

if [ "$var" = "foo" ]; then   # sh

我并不是说这是唯一的区别,但这是一个常见的问题。

相关内容