linux极简小知识:34、带你了解echo的方方面面【echo命令的全面介绍】

693 阅读6分钟

本文已参与「掘力星计划」,赢取创作大礼包,挑战创作激励金。

一次性了解清楚常用的echo命令! Shell中的echo命令用于输出字符串。

参与评论可以领取掘金周边大奖,走过路过不要错过!!!

显示普通字符串

显示字符串时,可以使用双引号,或者取消双引号直接写内容。

# echo "It is a test"
It is a test
# echo It is a test
It is a test

使用双引号,表示输出的是一个内容,这个内容用双引号包含。

不使用双引号,表示依次输出echo后的每个内容

使用转义字符

echo后的内容,如果使用双引号"",则会被作为字符串的标识处理,只显示引号中的内容。

比如:

# echo It is a "test"
It is a test

想要输出引号"",可以使用转义字符\

# echo It is a \"test\"
It is a "test"
# echo "It is a \"test\""
It is a "test"

显示变量

  • echo $variable输出变量
# a="a test"
# echo $a
a test
# echo "a变量的内容:$a"
a变量的内容:a test
  • 在sh脚本文件中,使用echo输出变量。

read 命令从标准输入中读取一行,并把输入行指定给 shell 变量。

#!/bin/sh
read name 
echo "$name It is a test"

保存以上代码为test.sh。执行,并输入内容:

# sh test.sh
我是输入                 #标准输入
我是输入 It is a test    #输出

echo -e处理转义字符

echo -e用于对能转义的字符进行转义。

\n转义显示换行

比如字符串中有\n,将会转义为换行。

# echo -e "OK! \n"
OK!

# echo -e "It is a\n test"
It is a
 test

可能的转义字符

使用-e参数,以下字符将进行转义的特殊处理:

  • \a 发出警告声;
  • \b 删除前一个字符;
  • \c 最后不加上换行符号;
  • \f 换行但光标仍旧停留在原来的位置;
  • \n 换行且光标移至行首;
  • \r 光标移至行首,但不换行;
  • \t 插入tab;
  • \v 与\f相同;
  • \nnn 插入nnn(八进制)所代表的ASCII字符;

对比下\a发出声音的不同:

# echo -e "a\adddd"
adddd
# echo -e "aadddd"
aadddd

Windows下会显示系统错误消息的提示音。

使用八进制输出ascii字符

# echo -e "\061 \062 \0101 \0141"
1 2 A a

常见八进制表示的ASCII码:

041 !   042 "   043 #   044 $   045 %   046 &   047 '
050 (   051 )   052 *   053 +   054 ,   055 -   056 .   057 /
072 :   073 ;   074 <   075 =   076 >   077 ?

输出单引号:

# echo -e '\047'
'

彩色输出

使用 echo -e 还可以实现对文字内容的颜色控制。

  • 输出背景色和文字色的格式如下:

echo -e "\e[文字背景颜色;文字颜色m字符串\e[0m"

echo -e "\033[文字背景颜色;文字颜色m字符串\033[0m"

  • \e[\033[后只有一个颜色值,表示仅设置文字颜色:

echo -e "\e[文字颜色m字符串\e[0m"

echo -e "\033[文字颜色m字符串\033[0m"

  • 文字色的颜色码值:重置=0,黑色=30,红色=31,绿色=32,黄色=33,蓝色=34,洋红=35,青色=36,白色=37

  • 背景色的颜色码值:重置=0,黑色=40,红色=41,绿色=42,黄色=43,蓝色=44,洋红=45,青色=46,白色=47

\e[文字背景颜色;文字颜色m 中除了背景色、文字色以外,还有第三个参数,用于设置文字的属性。

\e[文字背景颜色;文字颜色;文字属性m

文字属性可能的值为:0 关闭所有属性、1 设置高亮度(加粗)、4 下划线、5 闪烁、7 反显、8 消隐。

如下,新建sh脚本文件,内容为各种颜色的测试输出:

#!/bin/sh
echo "---------输出文字颜色30~37-----------"
echo -e "\e[47;30m 黑色字 \e[0m"
echo -e "\e[31m 红色字 \e[0m"
echo -e "\e[32m 绿色字 \e[0m"
echo -e "\e[33m 黄色字 \e[0m"
echo -e "\e[34m 蓝色字 \e[0m" 
echo -e "\e[35m 紫色字 \e[0m" 
echo -e "\e[36m 天蓝字 \e[0m" 
echo -e "\e[37m 白色字 \e[0m" 

echo -e "\n---------输出文字背景颜色40~47-----------"
echo -e "\033[40;37m 黑底白字 \033[0m"
echo -e "\033[41;37m 红底白字 \033[0m" 
echo -e "\033[42;37m 绿底白字 \033[0m" 
echo -e "\033[43;37m 黄底白字 \033[0m" 
echo -e "\033[44;37m 蓝底白字 \033[0m" 
echo -e "\033[45;37m 紫底白字 \033[0m" 
echo -e "\033[46;37m 天蓝底白字 \033[0m" 
echo -e "\033[47;30m 白底黑字 \033[0m"

echo -e "\n---------输出第三个属性-----------"
echo -e "\033[40;37;1m 黑底白字加粗 \033[0m"
echo -e "\033[41;37;4m 红底白字下划线 \033[0m" 
echo -e "\033[42;37;5m 绿底白字闪烁 \033[0m" 
echo -e "\033[43;37;7m 黄底白字反显 \033[0m" 
echo -e "\033[44;37;8m 蓝底白字消隐 \033[0m" 

效果如下:

输出不以换行结束

-e "\c"

\c 转义表示结尾不是换行,从结尾处继续。

[root@VM_0_15_centos test]# echo -e "OK! \c"
OK! [root@VM_0_15_centos test]#

比如,如下脚本内容:

#!/bin/sh
echo -e "OK! \c" # -e 开启转义 \c 不换行
echo "It is a test"

执行结果:

# sh test1.sh
OK! It is a test

-n参数

echo -e "\c"echo -n "" 的效果一样。

echo -n用于输出时不换行。

[root@VM_0_15_centos test]# echo -n "OK! "
OK! [root@VM_0_15_centos test]#
#!/bin/sh
echo -n "OK! " # -n 不换行
echo "It is a test"

将显示结果重定向到文件中

# echo "It is a test" > myfile
# echo "It is a test[append]" >> myfile

echo不进行转义,原样输出

默认情况下,echo的输出对特殊字符不进行转义。而是原样输出。

# echo "It is a\n test"
It is a\n test

但是,在有些情况下,\会作为转义符号不进行输出,比如双引号、单引号中。

# echo It is a \"test\"
It is a "test"
# echo It is a \'test\'
It is a 'test'
# echo "It is a \"test\""
It is a "test"

上面的\并没有原样输出。要想原样输出,可以采用单双引号交替的形式。

# echo 'It is a \"test\"'
It is a \"test\"
# echo "It is a \'test\'"
It is a \'test\'

echo使用反引号执行命令并输出

echo后面使用反引号 ` 可以实现命令的执行。

# echo `date`
Tue Sep 21 16:18:57 CST 2021

echo中的多行内容(输出多行内容到文件中)

echo后用引号包含的内容,可以直接使用回车换行,即引号中可以为多行内容。

这样,可以实现输出多行到文件中:

# echo "hello
> world
> I am a multiple lines content">>mulline.txt
# cat mulline.txt
hello
world
I am a multiple lines content

参考