gpt4 book ai didi

bash - bash 中的 glob 模式无法识别 '('

转载 作者:行者123 更新时间:2023-11-29 09:11:13 24 4
gpt4 key购买 nike

运行以下命令时:

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

屈服于:

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) .

无论如何,bash 在执行 shopt -s extglob 之前会对整个命令行进行一些解析。命令。当 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 extglob\necho !(file1|file2)'

关于bash - bash 中的 glob 模式无法识别 '(',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21108637/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com