2013-07-18 36 views
0

我执行这样的命令GCC,在命令行中有&&的含义是什么?

echo 'int main(){printf("%lu\n",sizeof(void));}' | gcc -xc -w -&& ./a.out 

,并可以得到结果:1。 但我无法找出什么 - & &手段,甚至在搜索手册页和谷歌。而我尽量不执行它 - & & option.it将错误这样的:

./a.out:1: error: stray ‘\317’ in program 
./a.out:1: error: stray ‘\372’ in program 
./a.out:1: error: stray ‘\355’ in program 
./a.out:1: error: stray ‘\376’ in program 
./a.out:1: error: stray ‘\7’ in program 
./a.out:1: error: stray ‘\1’ in program 
./a.out:1: error: stray ‘\3’ in program 
./a.out:1: error: stray ‘\200’ in program 
./a.out:1: error: stray ‘\2’ in program 
./a.out:1: error: stray ‘\16’ in program 
./a.out:1: error: expected identifier or ‘(’ before numeric constant 
./a.out:1: error: stray ‘\6’ in program 
./a.out:1: error: stray ‘\205’ in program 
./a.out:1: error: stray ‘\31’ in program 
./a.out:1: error: stray ‘\1’ in program 
./a.out:1: error: stray ‘\31’ in program 
./a.out:1: error: stray ‘\2’ in program 

......

谁知道选项的意思?

+0

关于你的代码的一些注释:'sizeof(void)'是非标准的;由于gcc特定的扩展,它会产生1。打印'size_t'值的正确格式是'%zu'。在调用'printf'之前你需要'#include ' - 这意味着你需要回显两行。 –

回答

11

-&&被shell解释为不是单个令牌,而是两个单独的令牌:-&&-标记对shell没有特殊含义,并作为参数传递给gcc,该标记将其解释为从标准输入读取源的指令。 &&是连接子句中的两个命令的shell运算符:仅当Aecho ... | gcc ...)成功完成时,A && B将执行Ba.out)。

使用gcc ... && ./a.out而不是简单的gcc ...; ./a.out的要点是仅在编译成功时才运行a.out,从而防止执行陈旧的a.out

+0

这似乎很合理。请告诉我你怎么知道这一点,我找不到它? –

+1

@ user1242027'&&'操作符记录在shell的手册中(“shell语法”下的'man bash')。这也是您在阅读其他人的shell脚本时经常遇到的问题。 “从标准输入读取”含义中的'-'命令行参数是一个长期的Unix传统,您可以通过使用随后的各种程序来获取它。 – user4815162342

+0

非常感谢你,你真的很帮我。 –

相关问题