所以如果我在命令行上运行它,我会运行以下命令,但会在 bash 脚本中给出此错误:
sudo -u $usr rm -rf "${htmldir}"/!("awstatsicons"|"awstats-icon"|"icon"|"roundcube"|"phpmyadmin"|"stats"|"htusers")
请注意,在 bash 脚本中,我在上面的行中指定了:“shopt -s extglob”。如果我在命令行上添加 usr 和 htmldir 变量,设置“shopt -s extglob”并准确复制该行,那么它就会按预期运行。但是从脚本运行它,会出现以下错误:
syntax error near unexpected token `('
我尝试了一些排列,但效果不佳。任何帮助,将不胜感激
答案1
您需要使 shell 具有交互性并用于history -p
解释!人物:
#!/bin/bash -i
eval $(history -p <your statement involving ! expansion>)
在调用shell脚本之前,需要保存历史记录:
history -a
例子:
cat jt
#!/bin/bash -i
eval `history -p !df`
df /; history -a
./jt
答案2
好的,基本上我已经发布了我的问题的一个片段。然而,@alecxs 是对的。我一定有一些带有隐藏字符的东西,或者是“空白”,导致了问题。我进去删除了所有“空”行,确保每行最后一个可见字符之后的所有内容都被删除。然后运行脚本,一切正常。再次感谢@alecxs