我正在尝试运行此脚本:
mkdir a
cd a
touch a1, a2, a_
ls ./a!(_)
echo -e '#!/bin/bash\nls ./a!(_)\n' >> run.sh
chmod a+x run.sh
./run.sh
ls
行按预期方式打印输出(./a1, ./a2,
),但是脚本失败并显示:
./run.sh: line 2: syntax error near unexpected token `('
./run.sh: line 2: `ls ./a!(_)'
是否可以在不使用find
或for
的情况下在bash脚本中使用括号?
您需要使用bash
启用extglob
的shopt -s extglob
选项才能使用否定模式。
将echo
行更改为
printf '%s\n' '#!/bin/bash' 'shopt -s extglob' 'ls ./a!(_)' > run.sh
之后您可以使用shopt -u extglob
禁用扩展的glob。
相关: