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之外的所有文件;如预期. #!/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: 它仍然不起作用,我很茫然. 解决方法
首先,为安全起见,让我们用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)' (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |