在Linux中有两个常见的Shell输出命令echo
和printf
,他们都可以打印,但是又有些许差别,接下来我们就来了解一下他们吧。
一、echo命令
echo是Shell的一个内部指令,用于在屏幕上打印出指定的字符串的标准输出。命令格式:
echo arg
echo命令的常见用于如下:
(1)打印普通字符
echo "Are you OK?"
#也可以不写双引号,效果是一样的
echo Are you OK?
(2)显示转义字符
#与上面的不同之处是这里加上-e参数之后会对转义字符进行转义
echo -e "Are you ok?\n\n"
(3)显示变量的值
#!/usr/bin
let a=100
#使用$变量名可以获取变量的值
echo "a is $a"
(4)显示命令的执行结果
#!/usr/bin
url=www.easyblog.top
# 先从url字符串中的0索引位置往后数6个字符截取之后打印
echo `url:0:6` # 也可以这么写 echo ${url:0:6}
二、ptintf命令
学过C语言的同学应该对C中的标准输出函数printf
不陌生,几乎编程一入门第一个了解的是main
函数,第二个可能就是printf
函数了,Linux中的printf 命令
模仿 C 程序库(library)里的 printf() 程序。printf 由 POSIX 标准所定义,因此使用 printf 的脚本比使用 echo 移植性好。printf 使用引用文本或空格分隔的参数,外面可以在 printf 中使用格式化字符串,还可以制定字符串的宽度、左右对齐方式等。默认 printf 不会像 echo 自动添加换行符,我们可以手动添加 \n。
printf 命令的语法:
printf format-string [arguments...]
参数说明:
- format-string: 为格式控制字符串
- arguments: 为参数列表。
总体上来说,printf命令和C的printf()函数作用类似。这里对比C语言printf()函数来说明一下不同之处:
- (1)printf 命令 不用加括号
- (2)format-string 可以没有引号,但最好加上,单引号双引号均可。
实例:
#!/bin/bash
#printf没有自动回车,因此需要在末尾加上回车,它对转义字符是自动转移的
printf "hello world!\n"
#和上面的效果类似
printf 'hello world!\n'
#错误写法,只会打印hello
#printf hello world!\n
- (3)参数多于格式控制符(%)时,format-string 可以重用,可以将所有参数都转换。
- (4)arguments 使用空格分隔,不用逗号。
#!/bin/bash
#上面的错误写法可以这么改写
printf "%s %s\n" hello word #类似C中的printf("%s %s\n","hello word");
#格式只指定了一个参数,但多出的参数仍然会按照该格式输出,format-string 被重用
printf %s Are you OK? Ok Or not ok?
printf "%d" 1 2 3 4 5
printf "\n"
printf "%d %d %d\n" 1 2 3 4 5 6 7 8 9
#当arguments为空的时候,会有默认值填充
printf "%s %d\n"
#引用变量
url=www.easyblog.top
printf "This website is %s.\n" $url
#如果应用的变量类型不合法会报错,并且会有默认的值
printf "The first program always print %s %d\n" hello world
执行结果:
剩下的printf命令还有一些格式替代符以及转移字符,这里就不详细的说了,基本和C语言中的printf函数类似。
总结
当我们需要简单的输出一下结果的时候使用echo就够了,很简单,也没有繁琐的参数,但是当我们需要格式化输出的时候,printf命令将是不二之选。