是什么导致了这个bash语法错误?

是什么导致了这个bash语法错误?,bash,Bash,此命令在命令行上运行良好 if g++ -std=c++11 main.cpp ; then ./a.out; fi 但当我尝试将它作为函数添加到.bashrc时,它失败了 function cgo() { if g++ -std=c++11 "$1" ; then ./a.out; fi } >$ cgo main.cpp bash: syntax error near unexpected token `main.cpp' 我做错了什么?}并不特别;您需要使用显式终止前面的命令如

此命令在命令行上运行良好

if g++ -std=c++11 main.cpp ; then ./a.out; fi
但当我尝试将它作为函数添加到.bashrc时,它失败了

function cgo() { if g++ -std=c++11 "$1" ; then ./a.out; fi }

>$ cgo main.cpp
bash: syntax error near unexpected token `main.cpp'

我做错了什么?

}
并不特别;您需要使用
显式终止前面的命令如果将函数定义放在一行上

function cgo () { if g++ -std=c++11 "$1"; then ./a.out; fi; }

当使用
{brates}
时,在右大括号之前需要有一个换行符或分号。对于一行,这意味着您需要一个分号

function cgo() { if g++ -std=c++11 "$1" ; then ./a.out; fi; }
# ........................................................^

文档:

。示例:
{if true;then echo hello;fi}
和{1..3}中i的
;如果是真的,就去做;然后回显“$i”;fi done
{for i in{1..3};do:;done}
,与{1..3}中i的
{echo hello;}
相比;做回显“$i”;完成
其中
是强制性的。起初这些解决方案对我不起作用,但后来我尝试打开一个新的终端,它们确实起了作用。现在,我猜谜团是为什么命令“~/.bashrc”无法在我最初的终端会话中重新加载我的bashrc!