今天发现一个很基础,但我又确定的知识点,记录如下:
经常在Makefile的命令段发现@echo “print message”,和echo “print message”。
网上查了下是说echo加了@,命令会正常执行,但命令本身不回显(默认是显示命令到标准输出);未加@,则echo 后的命令体会执行也会回显。
1、 于是自己写了个shell脚本验证:
执行结果如下:
发现问题:
A:在shell脚本中@echo的用法不能被解析的。
B:第二条命令echo “ print message2 in "
命令是被正常执行的,执行结果是显而易见的(即在标准输出上打印print message2 in);
C:但上面提到的回显是不能体现(并没有打印echo "print message2 in")
猜测:
(1)shell本身不能解析@echo;
(2)shell不存在回显的情况;
2、 继续看在Makefile:
解决A:在Makefile中@echo是可以被解析的,这就是Makefile与shell的区别之一。
解决B、C:从打印的echo ”make clean...“和make clean...可以看出,命令回显了,命令被正常执行了。
继续看打印echo ”print to file1.txt“ >file1.txt而没有打印echo ”print message to file2 “>file2.txt也可以证实命令确实回显了.
而在cat file1.txt和cat file2.txt时可以证明,命令都被执行了。
结论:
(1):@echo不能被shell解析,shell也不存在命令回显;
(2):@echo能被Makefile解析,@echo和echo都能正常执行命令;@echo会回显命令,echo不回显命令。
说明:
(1):上面的shell脚本除了#!/bin/sh外也试过#!/bin/bash来解析,结果一样;
(2):Makefile默认是回显一般命令的,如cat、cp等(不确定是否所有命令),这些命令前加@后就不会回显,效果和@echo一样。
阅读(5792) | 评论(0) | 转发(0) |