为什么(* .foo | bar)会导致错误,但是!(*。foo | bar)没有?

时间:2017-12-10 18:55:59

标签: bash shell

错误

  

第852行:意外令牌附近的语法错误`('

第852行是函数的最后一行:

touch --reference="$KERNEL_FILE" "$moduledest"/modules.(*.bin|devname|softdep)

没有错误

!之前插入感叹号(

touch --reference="$KERNEL_FILE" "$moduledest"/modules.!(*.bin|devname|softdep)

如何touch !(*.bin|devname|softdep)的倒数?

/modules.alias.bin
/modules.builtin.bin
/modules.dep.bin
/modules.devname
/modules.softdep
/modules.symbols.bin

1 个答案:

答案 0 :(得分:3)

扩展的glob

您尝试否定与感叹号匹配的模式是"扩展的glob"。使用类似shopt -s extglob的命令在脚本中的某个位置启用。

带有扩展globbing语法的否定形式定义为!(list)

  

!(list)匹配给定模式以外的任何内容。

在这种情况下,该负匹配的倒数是syntaxis @(list)

  

@(list)匹配给定模式之一