【问题标题】:What do square brackets followed by exclamation mark in a linux command?linux命令中的方括号后跟感叹号是什么意思?
【发布时间】:2020-09-24 15:38:22
【问题描述】:

我找到了以下 linux 命令。

 cp -f [!r][!e][!d][!m][!i][!n][!e]* /SomePath

我知道cp 做了什么,-f 也没有问题。但我不知道的是方括号和感叹号的作用([!r][!e][!d][!m][!i][!n])。谁能帮帮我?

我在这里找到了这个命令:https://redmine.org/projects/redmine/wiki/HowTo_Migrate_Redmine_to_a_new_server_to_a_new_Redmine_version

【问题讨论】:

  • wildcards documentation 可能有用。看起来它正在复制除名称以 redmine 开头的文件之外的所有内容。

标签: linux ubuntu terminal command


【解决方案1】:

这在pattern matching下的手册中有描述:

[…]
匹配任何封闭的字符。 [...] 如果[ 之后的第一个字符是!^,则匹配任何未包含的字符。

所以,[!r] 是除 r 之外的任何字符,[!e] 是除 e 之外的任何字符,依此类推。 [!r][!e][!d][!m][!i][!n][!e]* 扩展为所有不以字符串redmine 开头的文件的名称(以. 开头的文件除外,除非设置了dotglob shell 选项)。

还有另一个 shell 选项可以让你写同样的东西更优雅一点:

shopt -s extglob
cp -f !(redmine)* /SomePath

其中!(<i>pattern</i>) 匹配除pattern 之外的所有内容。

【讨论】:

    猜你喜欢
    • 2021-09-18
    • 2011-01-11
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    • 2017-02-08
    • 1970-01-01
    • 1970-01-01
    • 2018-01-05
    相关资源
    最近更新 更多