套装和购物 - 为什么是两个?

套装和购物 - 为什么是两个?

setshopt都是控制各种选项的 shell 内置命令。我经常忘记哪些选项是由哪个命令设置的,以及哪个选项设置/取消设置(set -o/+o, shopt -s/-u)。为什么有两个不同的命令看似执行相同的操作(并且有不同的参数来执行此操作)?有没有简单的方法/助记符来记住哪个选项与哪个命令搭配?

答案1

据我所知,这些set -o选项是从其他 Bourne 风格的 shell(主要是 ksh)继承的选项,并且这些shopt选项是 bash 特有的选项。据我所知,没有任何逻辑。

答案2

不同之处在于 bash 使用的环境变量发生了变化。使用set命令设置结果为$SHELLOPTS.使用shopt命令设置结果为$BASHOPTS.

答案3

答案4

来自《Linux Shell Scripting with Bash》一书,第 63 页:

从历史上看,该set命令用于打开和关闭选项。随着选项数量的增加,set使用变得越来越困难,因为选项由单字母代码表示。因此,Bash 提供了shopt(外壳选项) 命令通过名称而不是字母打开和关闭选项。您只能通过字母设置某些选项。其他的只能在shopt命令下使用。这使得查找和设置特定选项成为一项令人困惑的任务。

相关内容