加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

bash中的glob模式不识别'(‘

发布时间:2020-12-15 21:34:01 所属栏目:安全 来源:网络整理
导读:运行以下命令时: rm -rf !(file1|file2) 删除除file1和file2之外的所有文件;如预期. 将此命令放在bash脚本中时: #!/bin/bashrm -rf !(file1|file2) 或使用bash -c运行它: bash -c "rm -rf !(file1|file2)" 我收到以下错误: syntax error ner unexpected
运行以下命令时:

rm -rf !(file1|file2)

删除除file1和file2之外的所有文件;如预期.
将此命令放在bash脚本中时:

#!/bin/bash
rm -rf !(file1|file2)

或使用bash -c运行它:

bash -c "rm -rf !(file1|file2)"

我收到以下错误:

syntax error ner unexpected token '('

我尝试过使用设置shell选项

shopt -s extglob

yeilding in:

bash -c "shopt -s extglob; rm -rf !(file1|file2)"

根据以下内容启用glob:
https://superuser.com/questions/231718/remove-all-files-except-for-a-few-from-a-folder-in-unix和其他一些问题.

它仍然不起作用,我很茫然.

解决方法

首先,为安全起见,让我们用echo!(file1 | file2)而不是rm -rf!(file1 | file2)进行测试.

无论如何,在执行shopt -s extglob命令之前,bash会对整个命令行进行一些解析.当bash遇到(,extglob选项尚未设置.这就是你得到错误的原因.

试试这个:

bash -O extglob -c 'echo !(file1|file2)'

在您的脚本中,您只需要在依赖它之前将该选项作为单独的命令行打开:

#!/bin/bash
shopt -s extglob
echo !(file1|file2)

您实际上也可以使用-c标志执行此操作:

bash -c 'shopt -s extglob
echo !(file1|file2)'

或者甚至像这样:

bash -c $'shopt -s extglobnecho !(file1|file2)'

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读