我有一个 bash 脚本,每晚在 cron 作业中运行。它需要进行不区分大小写的文件匹配,因此脚本调用
shopt -s nocaseglob
我想确保这不会影响其他 cron 脚本。此脚本结束后此设置是否仍然存在?或者此设置仅在脚本运行期间启用?
谢谢!
答案1
设置选项shopt
是 shell 设置。它只影响运行它的 shell 实例:它对于 shell 进程以及由 和类似构造调用的子 shell 来说是本地$(…)
的(…)
。它对同时或稍后执行的其他 shell 脚本没有影响,甚至对碰巧从此脚本执行的命令执行的独立 bash 脚本也没有影响。
这同样适用于变量的值和类型,只要它们不被导出。函数也可以有局部变量;选项始终是全局的,因为如果您在函数中设置它们,那么当函数返回时它们仍然保留在原处。
环境变量(即导出变量)、I/O 重定向、资源限制、umask、当前目录和许多其他设置适用于当前 shell 进程以及所有子进程(即该脚本调用的所有命令)。它们也不会逃逸到可能同时执行的不相关进程。