我编写了以下shell脚本:
#!/bin/bash
...
#delete downloaded file
if [ "$param" == "delete" ]; then
shopt -s extglob
cd $DataPersistent/download/
rm -f !($label.*)
cd $DataPersistent/swm/install_pkg/
rm -rf !($label|$label.json|active.json)
shopt -u extglob
fi
...当我删除if语句时,它可以正常工作,但是当我添加if语句时,它会导致以下错误:
/usr/local/bin/clear.sh: line 17: syntax error near unexpected token `('
/usr/local/bin/clear.sh: line 17: ` rm -f !($label.*)'是什么引起的?我怎么才能修好它?
发布于 2021-11-16 10:56:45
shopt -s extglob更改shell的语法。如果没有此语句,扩展的全局模式!($label|$label.json|active.json)是无效的语法。
问题是,在shell执行启用extglob shell选项的D3命令之前,已经解析了整个if语句,并找到了语法错误。
当需要更改允许语法的行不是复合命令的一部分(这就是if语句)时,shopt命令已经启用了extglob,这就是它工作的原因。
要解决这个问题,在extglob语句之前启用if,然后禁用它。
这与这里还发现的问题相同:在复合命令中设置bash选项
https://unix.stackexchange.com/questions/677743
复制相似问题