Shell 入门教程(八):如何打印字符串

文章首发于【陈树义的博客园】,点击跳转到原文: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 浮点

文章首发于【陈树义的博客园】,点击跳转到原文:https://www.cnblogs.com/chanshuyi/p/quick_start_of_shell_08_print_string.html

posted @   陈树义  阅读(4080)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示