Bash中Printf和Echo的区别是什么?

314 阅读3分钟

我们可能想以一种特定的方式来组织Ubuntu操作的结果。也许我们应该避免臃肿的结果,以简明的风格呈现信息。echo和printf这两个命令也被构造出来。Printf提供了创建格式化字符串的功能,并在失败时提供一个非零的退出状态。而echo通常以0的状态离开,并且通常在这个标准结果后输出以行尾字符为首的输入。printf "比 "echo "给你更多的输出格式选择。在这个简短的课程中,我们将研究如何在Ubuntu 20.04 Linux系统中使用echo和printf指令来设计终端的结果。

例子01:

为了强调和了解printf和echo语句的工作原理,让我们来看看第一个简单易行的例子。你必须打开控制台shell程序来进行操作。为此,在Ubuntu 20.04 Linux操作系统的桌面屏幕上使用 "Ctrl+Alt+T"。控制台应用程序将在片刻后被打开,为此,你不需要等待太多。终端打开后,我们将分别执行 "printf "和 "echo "两个语句,看看它们如何正常工作。因此,我们首先在shell上尝试了 "printf",在我们的shell上打印出一个字符串 "Linux "中的字符数。

该命令与 "wc "关键字一起使用了"-m "标志。该命令已在下面的图片中列出。在按下 "Enter "键执行该命令后,我们得到的结果是5。这意味着 "printf "中只包含5个字母。由于printf是一个标准的语句,这就是为什么在控制时它会以标准的格式显示参数。

$ printf'linux'| wc -m

现在让我们看一下 "echo "语句。所以,该命令的整体语法是相同的,但这里将使用 "echo "语句而不是 "printf"。命令中提供的字符串也是一样的。当我们在控制台运行该命令时,其结果显示为6个数字。当一个字符串只包含5个字符时,为什么会出现这种情况?这是因为根据bash的 "echo "标准手册,"echo "语句也将 "换行 "算作其字符。如果我们在字符串之前或之后添加一些空格,它也会将其作为一个字符。

$ echo'linux'| wc -m

例02:使用Printf

让我们在新的例子中先看看 "printf "语句的工作情况。利用nano touch命令和shell中的 "nano "命令,创建一个新的bash文件 "test.sh"。nano命令将被用来在 "Nano "编辑器中打开该文件。文件被打开后,我们首先在文件的第一行添加了bash扩展名。变量 "str "已经被初始化,其中有一个长字符串值。我们声明了一个内置变量 "IFS",使用空格作为分隔符的值。

然后我们在下一行使用了 "read "命令,将字符串变量的值作为一个数组来读取,并将其保存到变量 "Arr "中。这里特别使用了"-ra "标志来达到这个目的。在这之后,利用echo语句让我们知道数组变量 "Arr "的大小。for "循环已经被初始化,以便从一个字符串变量中迭代每个字,并使用 "printf "语句在shell上显示。我们知道printf不会自动将下一行作为下一个字符,所以我们在printf语句中使用了"/n "字符来实现。循环在此结束,代码将在 "Ctrl+S "快捷键的帮助下保存。

为了看到printf语句的结果,用 "bash "命令执行该文件,使其发挥作用。输出显示的是一个数组的大小,即9。之后,使用 "for "循环对一个字符串的每个字进行了迭代,并在终端上分别显示每一个下一行。这是在 "printf "子句中使用 "n "完成的。否则,它可能不会发生。

$ bashtest.sh

例子03:使用Echo

在这个新的例子中,我们将说明bash脚本中 "echo "语句的作用。因此,我们在shell控制台的 "nano "命令的帮助下,打开了同样的 "test.sh "查找。该文件在nano编辑器中被打开。所有的代码都没有改变,即支持bash,"str "字符串,IFS变量,读语句和 "for "循环。你要做的唯一改变是:在bash脚本中用 "echo "关键字替换 "printf "字样。

你可以看到我们还在 "echo "语句中加入了"\n",以便进入新的一行。我们都知道,"echo "语句总是将换行视为一个额外的字符;因此,它不会将输出的格式化。

让我们运行代码来看看结果。echo语句没有创造一个新行的间隙,而是将"/n "视为一个额外的字符。因此,输出看起来像下面的东西。

$ bashtest.sh

让我们更新一下代码,以获得所需的结果。因此,在打开文件后,我们将"\n "字符从echo语句的字符串中删除。保存了代码并退出了文件。

这次运行更新后的代码后,我们又得到了一个字符串数组的大小为 "9"。之后,数组中的所有字都被分别显示出来,每个字都在下一行。

$ bashtest.sh

总结。

本指南包含一个以上的例子来说明 "printf "和 "echo "语句的功能和区别。更倾向于在bash中使用 "printf "语句,因为它更加标准化,因为 "echo "在其他平台上的表现截然不同。