Chinaunix首页 | 论坛 | 博客
  • 博客访问: 141518
  • 博文数量: 21
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 233
  • 用 户 组: 普通用户
  • 注册时间: 2013-03-17 15:31
个人简介

学习中。。

文章分类

全部博文(21)

文章存档

2015年(1)

2014年(17)

2013年(3)

我的朋友

分类: LINUX

2014-09-05 17:09:03

        今天发现一个很基础,但我又确定的知识点,记录如下:
        经常在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一样。




阅读(5736) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~