gpt4 book ai didi

bash - 为什么模式 "*.so?(.*)"在脚本中而不是在命令行中产生语法错误?

转载 作者:行者123 更新时间:2023-11-29 09:37:59 26 4
gpt4 key购买 nike

该模式有点不寻常,因为我添加了尾随“?(.*)”部分。它按我的预期在命令行上运行,但我在脚本中遇到了相同的语法错误。

$ bash --version
GNU bash, version 4.3.11(1)-release (i686-pc-linux-gnu)
...
$ cat x.sh
touch a.so a.so.1
ls *.so?(.*)
rm *.so?(.*)
$ touch a.so a.so.1
$ ls *.so?(.*)
a.so a.so.1
$ rm *.so?(.*)
$ ls
x.sh
$ bash x.sh
x.sh: line 2: syntax error near unexpected token `('
x.sh: line 2: `ls *.so?(.*)'
$

最佳答案

您正在使用扩展的 glob,但这些在脚本中默认情况下并未启用。为了使用它们,必须明确启用它们。您可以通过在行前添加以下代码来实现:

shopt -s extglob

稍后要在脚本中禁用它们,您可以使用 shopt -u extglob

作为chepner正确地指出,此功能在交互式 shell 中默认情况下也未启用。据推测,这一行出现在您的系统范围启动脚本之一或您的个人启动脚本之一中。

关于bash - 为什么模式 "*.so?(.*)"在脚本中而不是在命令行中产生语法错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30735053/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com