模式匹配在 Bash 脚本中不起作用
- 2024-11-11 08:26:00
- admin 原创
- 159
问题描述:
使用模式匹配!("file1")
在 bash 脚本中不起作用但可以在命令行中起作用。
例如:
ls !("file1"|"file2")
这将列出目录中除file1
和之外的所有文件file2
。
当在脚本中执行该行时,会显示以下错误:
./script.sh: line 1: syntax error near unexpected token `('
./script.sh: line 1: ` ls !("file1"|"file2") '
无论使用什么rm -v !("file1")
。都会发生相同的错误。这是怎么回事?为什么这在脚本中不起作用?
解决方案 1:
您尝试使用的扩展 glob 语法默认是关闭的;您必须在想要使用它的每个脚本中单独启用它。
shopt -s extglob
脚本不应该使用ls
,但我想您在这里只是将它用作占位符。
解决方案 2:
除非您启用 shell opt,否则通配符不会以这种方式工作extglob
。相反,我建议使用find
:
find . -maxdepth 1 -not -name '<NAME>' -or -name '<NAME>' -delete
在运行此命令之前,请-delete
确保输出正确
解决方案 3:
采用默认设置且无外部过程的方法:
for f in *; do [[ $f =~ ^file[12]$ ]] || echo "$f"; done
相关推荐
热门文章
项目管理软件有哪些?
热门标签
云禅道AD