文章首发于【陈树义的博客园】,点击跳转到原文:https://www.cnblogs.com/chanshuyi/p/quick_start_of_shell_08_print_string.html
在 Shell 脚本中,我们可以使用 echo 命令或者 printf 命令来打印字符串。echo 适合用于简单的打印,而 printf 则适用于统一缩进的复杂打印。
echo命令
在 Shell 语言中,一般使用 echo 命令来打印字符串。而 echo 命令后面跟着的字符串有好几种形式:裸奔、单引号、双引号。
第一种,裸奔。
所谓裸奔就是后面什么引用符号都不用加,直接写上要输出的字符串。
echo Hello,My Name is chenshuyi!
这种方式会直接输出 echo 命令后的所有字符,例如上面会输出:Hello,My Name is chenshuyi!
。但这种方式有个缺陷,就是无法输出分号;
。因为当读到分号的时候,程序会认为这一行代码结束了。
echo Hello; I am chenshuyi
上面的命令的输出结果是:
Hello
-bash: I: command not found
可以看到程序只输出了 Hello,并把后面的I
当成了一个命令。
第二种,单引号的引用方式。
str='Hello ! My Name is chenshuyi';
echo $str
上面的语句成功输出:Hello ! My Name is chenshuyi
。但这种方式的缺陷是无法在字符串中引用变量。
NAME="chenshuyi"
str='Hello ! My Name is $NAME';
echo $str
上面的输出结果是:Hello ! My Name is $NAME
。可以看到我们无法打印出 NAME 变量的值。
第三种,双引号的引用方式。
NAME="chenshuyi"
str="Hello! My Name is $NAME";
echo $str
输出结果:Hello! My Name is chenshuyi
。可以看到在双引号的引用方式下,我们可以成功打印出 NAME 变量的值。但是这种方式也有其缺陷,就是无法直接打印出特殊字符,需要把特殊进行转义。
简单地说:如果你打印的语句没有任何变量,那么直接和特殊字符,直接裸奔也未尝不可。但如果有一些特殊字符,那么使用单引号可能更好。如果又有特殊字符,又需要引用变量,那么只能使用双引号了。
printf命令
使用 printf 命令可以对齐打印字符串,对于阅读比较友好。
#!/bin/bash
# author:陈树义
# site:www.shuyi.me
printf "%-10s %-8s %-4s\n" 姓名 年龄 存款K
printf "%-10s %-8s %-4.2f\n" 郭靖 30 52.20
printf "%-10s %-8s %-4.2f\n" 杨过 25 26.32
printf "%-10s %-8s %-4.2f\n" 郭芙 27 15.20
在这样一个符号中%-10s
,百分号是个标识符,-
表示左对齐,数字10表示保留10位的长度,s表示其实一个字符串。
- 对应的
%-8s
表示左对齐、保留 8 位,是字符串。 - 对应的
%-4.2f
表示左对齐、保留 4 位、小数点保留两位,是个浮点型数字。
在 printf 中的格式替代符一共有下面四个:
- d: Decimal 十进制整数
- s: String 字符串
- c: Char 字符
- f: Float 浮点