为什么Shell脚本以悬空'}'运行?

Yog*_*esh 1 bash shell scripting

我编写了这个脚本,用一个命令编译和运行我的C和java程序.

     1   run(){
     2      gcc -lm $1 && ( shift; ./a.out $* )
     3     }
     4
     5   jrun(){
     6      clas=`echo $1 | cut -d'.' -f1 `
     7      javac $1 && { shift; java $clas $* }
     8   }
Run Code Online (Sandbox Code Playgroud)

但在运行得到错误.

# source t.sh
-bash: t.sh: line 9: syntax error: unexpected end of file
Run Code Online (Sandbox Code Playgroud)

我最后添加时脚本成功运行'}' .

只是意识到,我用{}的,而不是()line 7.

我的问题是为什么它的运行和工作正常'}'

tri*_*eee 5

$*分开支架后你需要一个分号.事实上,它只是被解释为一个论据javac.

顺便说一下,你可能正在寻找

run(){
   gcc -lm "$1" || return
   shift
   ./a.out "$@"
   }

jrun(){
   javac "$1" || return
   local clas=${1%.*}
   shift
   java "$clas" "$@"
 }
Run Code Online (Sandbox Code Playgroud)

它修复了许多引用问题,并避免了稍微笨拙的复合命令.该local声明阻止函数破坏具有相同名称的全局变量,但它是一种基础.