自学内容网 自学内容网

echo:编程界的“反噬者”

echo的名字意思是“回声”,动词意词是“回响”,就是产生回声。

echo本来是在Unix或Linux的shell命令行中使用的命令,但在Windows的cmd命令行窗口也是支持的,只不过使用方式有些不同。

一、基础版

echo "Hello, World!"

这个命令的功能想必大家都能猜到,就像我们学的第一个C语言程序一样,打印出一串字符。

同样是打印为什么叫echo而不叫print或printf呢,因为它想向你展示的是这样的情景:

你双手合拢在嘴巴前,大喊一声“Hello, World!”。

人们各忙各的,没人理你……

片刻后,大山那边传来一声“Hello, World!”。

还是山里人厚道啊!

这里要注意一点,上面的语法适用于Linux,如果在Windows下打印不用引号:

echo Hello, World!

二、变量传递

echo不仅仅能输出固定的文字,它还能输出变量的值。比如Linux下:

name="World"

echo "Hello, $name!"

无论你丢过去什么name,它都回原封不动的返还给你,像不像一门失传的武功:斗转星移?

在Widows下有点儿繁琐,需要改成下面的形式:

set name=World

echo Hello, %name%!

看到没,Windows下给变量赋值得在变量前加个set,然后使用时得用两个%像肉夹馍一样夹住变量名。

在Windows下还可以直接用下面的命令输出用户名、当前日期和时间:

echo %username%

echo %date%

echo %time%

三、变量传递

你以为echo只会回应你的“喊话”?它还能把它们写到文件里去呢!

这分明是另一门武功:乾坤大挪移。

Linux:

echo "Hello, World!" > file.txt

Windows:

echo Hello, World! > file.txt

如果文件已经存在,则会被覆盖;如果文件不存在,则会创建新文件。

如果想在文件末尾追加内容,只需将>改为>>即可。

四、管道传输

echo还能和其他命令联手,通过管道(|)传递数据。比如,你想把一句话转换成大写,再输出,在Linux下可以这样做:

echo "hello, world!" | tr '[:lower:]' '[:upper:]'

这里,echo就像是一个“快递小哥”,把数据打包好,通过管道(就是中间那根柱状管道“|”)送到tr命令那里,让它进行转换。

注:tr是一个字符转换命令,它可以将一种字符集转换为另一种字符集。在这里,'[:lower:]'表示所有的小写字母,'[:upper:]'表示所有的大写字母,因此tr命令将所有小写字母转换成了大写字母。

Windows下没有tr命令,但还是有管道功能的,用的也是“|”这个符号。比如:

echo 20|abc

执行这个命令后,操作系统会自动把20输入到文件名为abc程序。这是我们常用的输入技巧,如果程序运行后需要输入数据,我们手动输入是需要一定时间的,这就会让程序显示的运行时间变长。为了获得正确的程序运行时间,我们就可以采用echo向程序输入数据。

举个最简单的例子:

#include<stdio.h>
#include<time.h>

int main(){
    int a;
    scanf("%d", &a);
    printf("%d\n", a);
    //输出程序运行秒数
    printf("Time used = %.2f\n", (double)clock() / CLOCKS_PER_SEC);
    return 0;
}

如果你输入时磨磨蹭蹭,程序的运行时间就会出现相当大的误差,老金现身说法,把上面程序的运行时间搞到了8秒。

如果你在cmd窗口用echo 9527|abc,这时是操作系统替你输入数据,时间就只有0秒。

注意:要把abc.exe文件放在对应的目录里,如这里就要放到D盘根目录下。

五、特殊字符处理

有时候,你想输出一些特殊字符,比如换行符、制表符,这时候echo也有妙招。比如,输出一个换行符,Linux:

echo -e "Hello,\nWorld!"

这里的-e选项用于启用转义字符。还有一个选项-n 用于禁止在输出结束时添加换行符。这是Linux特有的功能,Windows里是没有的。


原文地址:https://blog.csdn.net/jjmhx/article/details/143835889

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!