我正在尝试编写一个使用nocasematch
的bash函数,而不更改该选项的调用者设置。函数定义为:
is_hello_world() {
shopt -s nocasematch
[[ "$1" =~ "hello world" ]]
}
在我称呼它之前:
$ shopt nocasematch
nocasematch off
称它为:
$ is_hello_world 'hello world' && echo Yes
Yes
$ is_hello_world 'Hello World' && echo Yes
Yes
符合预期,但现在调用者的
nocasematch
已更改:$ shopt nocasematch
nocasematch on
是否有任何简单的方法可以使选项在函数中本地化?
我知道我可以检查
shopt -q
的返回值,但这仍然意味着该函数应该记住这一点并在退出前将其重置。 最佳答案
函数主体可以是任何复合命令,而不仅仅是组命令({}
)。使用子 shell :
is_hello_world() (
shopt -s nocasematch
[[ "$1" =~ "hello world" ]]
)