shopt在命令行中工作,在脚本中运行时找不到

我正在写一个脚本来复制一些文件,并尝试使用shopt -s dotglob 来启用cp来复制像.jshint和诸如此类的点文件。

我可以直接在bash提示符下运行shopt -s dotglob ,没有错误。 但是,运行该脚本会引发错误:

 script.sh: 81: script.sh: shopt: not found 

我在bash shell中运行这个脚本,使用shebang标题#!/usr/bin/env bash 。 错误行:

 shopt -s dotglob cp -r $TEMP/img/* $TARGET/img/ cp -r $TEMP/js/* $TARGET/js/ cp -r $TEMP/less/* $TARGET/less/ 

没有在谷歌上找到任何有用的东西,任何想法是什么问题在这里?

从评论中得出答案:

许多习惯于用sh而不是bash运行脚本的人。 如果可移植性是一个问题,这是一个很好的做法,但很多人这样做是因为他们在不理解它的情况下复制他们所见过的东西。

除非你的脚本需要在非桌面Linux系统上运行(例如,在Android设备上运行shell脚本是完全不同的),我建议在开头使用Bash shebang行:

 #!/bin/bash 

当这行是脚本的第一行时,它确定调用哪个解释器(如bash或sh,Python等shell)来执行它。 如果使用上面的行,假设您使用默认shell,您将获得与命令行相同的行为(几乎)。 如果出于可移植性或偏好的原因,您使用不同的shebang行,请注意您必须查阅您引用的shell的文档, 即使您引用的shell是Bash的符号链接。