echo命令的功能是在显示器上显示一段文字,一般起到一个提示的作用。
该命令的一般格式为:echo [ -n ] 字符串
其中选项n表示输出文字后不换行;字符串能加引号,也能不加引号。用echo命令输出加引号的字符串时,将字符串原样输出;用echo命令输出不加引号的字符串时,将字符串中的各个单词作为字符串输出,各字符串之间用一个空格分割。
1.命令格式:
echo [-ne][字符串]或 echo [--help][--version]
补充说明:
echo会将输入的字符串送往标准输出。输出的字符串间以空白字符隔开, 并在最后加上换行号。
3.命令参数:
-n 不要在最后自动换行
-e 若字符串中出现以下字符,则特别加以处理,而不会将它当成一般文字输出:
\a 发出警告声;
\b 删除前一个字符;
\c 最后不加上换行符号;
\f 换行但光标仍旧停留在原来的位置;
\n 换行且光标移至行首;
\r 光标移至行首,但不换行;
\t 插入tab;
\v 与\f相同;
\\ 插入\字符;
\nnn 插入nnn(八进制)所代表的ASCII字符;
–help 显示帮助
–version 显示版本信息
echo显示颜色
echo显示颜色,需要使用参数-e
格式如下:
echo -e "\033[字背景颜色;文字颜色m字符串\033[0m"
例如:
echo -e "\033[41;37m TonyZhang \033[0m"
其中41的位置代表底色, 37的位置是代表字的颜色
注:
1、字背景颜色和文字颜色之间是英文的“""”
2、文字颜色后面有个m
3、字符串前后可以没有空格,如果有的话,输出也是同样有空格
下面看几个例子:
echo -e "\033[30m 黑色字 \033[0m"
echo -e "\033[31m 红色字 \033[0m"
echo -e "\033[32m 绿色字 \033[0m"
echo -e "\033[33m 黄色字 \033[0m"
echo -e "\033[34m 蓝色字 \033[0m"
echo -e "\033[35m 紫色字 \033[0m"
echo -e "\033[36m 天蓝字 \033[0m"
echo -e "\033[37m 白色字 \033[0m"
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 "\033[42;31;1m 绿底红字高亮 \033[0m"
控制选项说明 :
\033[0m 关闭所有属性
\033[1m 设置高亮度
\033[4m 下划线
\033[5m 闪烁
\033[7m 反显
\033[8m 消隐
\033[30m -- \033[37m 设置前景色
\033[40m -- \033[47m 设置背景色
\033[nA 光标上移n行
\033[nB 光标下移n行
\033[nC 光标右移n行
\033[nD 光标左移n行
\033[y;xH设置光标位置
\033[2J 清屏
\033[K 清除从光标到行尾的内容
\033[s 保存光标位置
\033[u 恢复光标位置
\033[?25l 隐藏光标
\033[?25h 显示光标
echo输出!的问题
name="hello world"
[root@RHEL ~]# echo "$name Install Completed !"
-bash: !": event not found
因为 ! 会被当作命令行历史替换的符号来处理。不过在shell脚本中没有这样的问题,因为在脚本中Bash历史记录被关闭了。不幸的是,无法使用转义符来转义!:
[root@RHEL ~]# echo "$name Install Completed \!"
hello world Install Completed \!
1、使用单引号
[root@RHEL ~]# echo '$name Install Completed !'
$name Install Completed !
这样会原样的输出字符串,不进行转义,不取变量值
2、 set +H 来取消命令行历史替换。
[root@RHEL ~]# set +H
[root@RHEL ~]# echo "$name Install Completed !"
hello world Install Completed !
3、! 后面加空格
[root@RHEL ~]# echo "$name Install Completed ! "
hello world Install Completed ! (这里有空格)
4、不要将叹号放入 "" 中
[root@RHEL ~]# echo "$name Install Completed "!
hello world Install Completed !
#不能有两个!, !!表示上一个 执行的命令
[root@RHEL ~]# echo "$name Install Completed "echo "$name Install Completed "!!
echo "$name Install Completed "echo "$name Install Completed "ifconfig
hello world Install Completed echo hello world Install Completed ifconfig
#也不能在!后面加数字, !1表示第一个历史命令
[root@RHEL ~]# echo "$name Install Completed "echo "$name Install Completed "!1
echo "$name Install Completed "echo "$name Install Completed "ifconfig
hello world Install Completed echo hello world Install Completed ifconfig
5、不使用引号,问题同上一条
[root@RHEL ~]# echo $name Install Completed !
hello world Install Completed !
6、不使用引号,且在叹号前面加上转义字符\
[root@RHEL ~]# echo $name Install Completed \!\!
hello world Install Completed !!
echo 输出json格式
echo '{"name":"zhangsan", "age":"18"}'
[root@localhost ~]# echo '{"name":"zhangsan", "age":"18"}'
{"name":"zhangsan", "age":"18"}
[root@localhost ~]#
首先,大括号外面必须有单引号'',因为在shell里面大括号{}不用单引号引起来就相当于一个匿名函数,
不加单引号就等价去echo 输出 {"name":"zhangsan", "age":"18"} 这个匿名函数的返回值。
其次,大括号里面的字符串,必须用"" 双引号,不能用''单引号,否则会报错。
当大括号中带有变量时该怎么输出呢?
echo 后面的内容已经被''单引号引起来了,shell自身已经不可能再去解析变量了,那么只能我们职级手动去解析,这时候就想到eval命令,eval的一个功能就是将自己的参数变量进行展开,具体关于eval的命令,自行网上搜索吧,下面直接给出答案。
echo $(eval echo '{\"name\":\"zhangsan\", \"age\":\"$age\"}')
注意,第一个echo不是必须的,所以也可以是
eval echo '{\"name\":\"zhangsan\", \"age\":\"$age\"}'
还可以将变量放在'的外面
echo '{\"name\":\"zhangsan\", \"age\":\"'$age'\"}'