欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 养生 > Linux echo,printf 命令

Linux echo,printf 命令

2024/10/27 0:35:11 来源:https://blog.csdn.net/feyehong/article/details/142250062  浏览:    关键词:Linux echo,printf 命令

参考资料

  1. 【Linux】ハイフンをいっぱい出したかっただけなのに【printfコマンド】

目录

  • 一. echo命令
    • 1.1 -n 选项
    • 1.2 -e 选项
    • 1.3 配合扩展实现批量换行输出
    • 1.3.1 `xargs -n 1`
    • 1.3.2 `tr ' ' '\n'`
    • 1.3.3 `xargs printf "%s\n"`
    • 1.4 ANSI转义序列
    • 1.5 彩色文本输出
  • 二. printf 命令
    • 2.1 基本语法
    • 2.2 %s 格式化字符串
    • 2.3 %d 格式化整数
    • 2.4 %f 格式化小数
    • 2.5 生成指定数量的横线


一. echo命令

1.1 -n 选项

⏹echo命令默认情况下会输出换行符,通过-n选项可以不输出结尾的换行符。

fengyehong@ubuntu:~$ echo "HELLO WORLD"
HELLO WORLD
fengyehong@ubuntu:~$
# 使用了 -n 选项,因此换行符消失
fengyehong@ubuntu:~$ echo -n "HELLO WORLD"
HELLO WORLDfengyehong@ubuntu:~$

1.2 -e 选项

⏹启用解释反斜杠转义字符(如 \n 换行、\t 制表符等)。

# 未使用 -n 之前,只会原样输出
fengyehong@ubuntu:~$ echo "HELLO\nWORLD!"
HELLO\nWORLD!
fengyehong@ubuntu:~$
fengyehong@ubuntu:~$ echo -e "HELLO\nWORLD!"
HELLO
WORLD!

1.3 配合扩展实现批量换行输出

1.3.1 xargs -n 1

fengyehong@ubuntu:~$ echo file_{01..03}.{mp{3..4},mp{a,b,p,v}} | xargs -n 1
file_01.mp3
file_01.mp4
file_01.mpa
file_01.mpb
file_01.mpp
file_01.mpv
file_02.mp3
file_02.mp4
file_02.mpa
file_02.mpb
file_02.mpp
file_02.mpv
file_03.mp3
file_03.mp4
file_03.mpa
file_03.mpb
file_03.mpp
file_03.mpv

1.3.2 tr ' ' '\n'

fengyehong@ubuntu:~$ echo file_{01..03}.{mp{3..4},mp{a,b,p,v}} | tr ' ' '\n'
file_01.mp3
file_01.mp4
file_01.mpa
file_01.mpb
file_01.mpp
file_01.mpv
file_02.mp3
file_02.mp4
file_02.mpa
file_02.mpb
file_02.mpp
file_02.mpv
file_03.mp3
file_03.mp4
file_03.mpa
file_03.mpb
file_03.mpp
file_03.mpv

1.3.3 xargs printf "%s\n"

fengyehong@ubuntu:~$ echo file_{01..03}.{mp{3..4},mp{a,b,p,v}} | xargs printf "%s\n"
file_01.mp3
file_01.mp4
file_01.mpa
file_01.mpb
file_01.mpp
file_01.mpv
file_02.mp3
file_02.mp4
file_02.mpa
file_02.mpb
file_02.mpp
file_02.mpv
file_03.mp3
file_03.mp4
file_03.mpa
file_03.mpb
file_03.mpp
file_03.mpv

1.4 ANSI转义序列

⏹echo可以通过-e选项,配合ANSI转义序列来实现彩色文本的输出。

  • ANSI 转义序列的格式
    • \e\033:表示转义序列的开始。
    • [: 紧跟在 \e 后,表示开始颜色代码。
    • 0m:表示重置样式,恢复到默认颜色。
\033[<样式>;<前景色>;<背景色>m<文本>\033[0m
\e[<样式>;<前景色>;<背景色>m<文本>\e[0m

⏹常用颜色代码

  • 前景色(文本颜色)
    • 30:黑色
    • 31:红色
    • 32:绿色
    • 33:黄色
    • 34:蓝色
    • 35:紫色
    • 36:青色
    • 37:白色
  • 背景色
    • 40:黑色
    • 41:红色
    • 42:绿色
    • 43:黄色
    • 44:蓝色
    • 45:紫色
    • 46:青色
    • 47:白色
  • 文本样式
    • 0:重置/普通文本
    • 1:加粗
    • 4:下划线

1.5 彩色文本输出

⏹配合ANSI转义序列,实现文本彩色输出

使用 ANSI 转义码时,记得在希望重置颜色或样式的地方加上

  • \033[0m
  • 或者
  • \e

这将恢复终端的默认显示方式。

echo -e "\e[31m我是红色文本\e[0m"echo -e "\e[1;32m绿色加粗字体\e[0m"echo -e "\e[4;33m黄色文本带下划线\e[0m"echo -e "\e[37;44m白色文本,蓝色背景\e[0m"echo -e "\e[31m红色文字\e[0m \e[32m绿色文字\e[0m \e[34m蓝色文字\e[0m"

⏹效果如下

在这里插入图片描述


二. printf 命令

2.1 基本语法

  • ⏹选项
    • %s:字符串
    • %d:整数
    • \n:换行符
    • \t:制表符
  • ⏹注意事项
    • printf 不会自动换行,必须显式添加 \n
    • printf 也可以结合 ANSI 转义序列实现彩色输出。
printf FORMAT [ARGUMENT]...

2.2 %s 格式化字符串

⏹printf 输出默认不会添加换行符,需要手动添加\n换行符

fengyehong@ubuntu:~$ printf "%s\n" .{mp{3..4},mp{a,b,p,v}}
.mp3
.mp4
.mpa
.mpb
.mpp
.mpv

2.3 %d 格式化整数

  • seq 1 10:生成1到10的数字
  • %03d:整数格式化为3位
fengyehong@ubuntu:~$ seq 1 10 | xargs printf "value: %03d\n"
value: 001
value: 002
value: 003
value: 004
value: 005
value: 006
value: 007
value: 008
value: 009
value: 010

2.4 %f 格式化小数

  • shuf -i 10-99 -n 3:随机从 10 到 99 的整数范围内生成 3 个数。
  • awk '{printf "%.1f\n", $1/10}':将生成的整数除以 10,并保留 1 位小数。
# 将随机生成的3个小数放入nums变量中
fengyehong@ubuntu:~$ nums=$(shuf -i 10-99 -n 3 | awk '{printf "%.1f\n", $1/10}')
# 查看变量内容
fengyehong@ubuntu:~$ echo $nums
6.0 3.3 5.1

⏹小数格式化

fengyehong@ubuntu:~$ echo $nums | xargs printf "%.2f\n"
6.00
3.30
5.10

2.5 生成指定数量的横线

⏹先生成与数量相匹配的带横线的数字

fengyehong@ubuntu:~$ printf "%s-" {0..30} | xargs printf "%s\n"
0-1-2-3-4-5-6-7-8-9-10-11-12-13-14-15-16-17-18-19-20-21-22-23-24-25-26-27-28-29-30-

⏹然后通过tr命令删除所有的数字之后,再通过awk命令打印之后,就可以得到我们想要的指定数量的横线了。

fengyehong@ubuntu:~$ printf "%s-" {0..30} | tr -d '[0-9]' | awk '{print}'
-------------------------------

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com