首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 操作系统 > UNIXLINUX >

shell老掉牙报错,为什么

2012-09-01 
shell老报错,为什么?想做个类似于Makefile作用的shell脚本,当./comile.sh remove时可以删除除.c与.sh以外

shell老报错,为什么?
想做个类似于Makefile作用的shell脚本,当./comile.sh remove时可以删除除.c与.sh以外的所有文件,但为什么老出错,错误为:
./compile.sh: line 10: 在未预料的“(”附近出现语法错误
./compile.sh: line 10: `ls !(*.c|*.sh) | xargs rm'

代码为:

C/C++ code
#read -p "which files are what you want to compile? "case $# in    "1")        if [ "$1" == "remove" ]; then            ls !(*.c|*.sh) | xargs rm                        if [ "$?" == "0" ]; then                echo "remove successfully"            else                echo "remove failure"            fi        else            gcc -o ${1%.c} $1        fi        ;;    "2")        gcc -o ${1%.c} $1        gcc -o ${2%.c} $2        ;;    *)        echo "usage: $0 para1 [para2 ....]"        ;;esac


[解决办法]
楼主的用法是bash的扩展,需要开启extglob选项。

开头加上shopt -s extglob

热点排行