Bash打印带有新行的数组

96 阅读3分钟

数组是一个包含相同数据类型项目的容器,可以是整数类型,也可以是浮点类型。我们可以通过对数组进行若干操作来处理数组。一个常用的Delima是将数组断开,并将每个字打印在一个新的行上。今天的文章将讨论这一功能。为了理解这个概念,你需要进入Ubuntu终端,在Ubuntu上执行bash相关的条款。我们从最简单的例子到关键的例子来介绍这个话题,以便于用户理解。

例子1

在这个例子中,取一个变量并给它赋值。该值是一个长字符串。为了让字符串的结果在新的行中出现,我们将把变量的值分配给一个数组。为了确保字符串中存在的元素数量,我们将使用相应的命令打印元素的数量。

Sa="我是一个学生。我喜欢编程"

arr=(arr=( {a} )

echo"arrecho"arr有{#arr[@]}元素。"

你会看到,结果值显示了带有元素编号的信息。其中'#'号只用来计算存在的字数。[@]显示的是字符串元素的索引号。而"$"符号是用于变量。

为了在新的一行中打印每个单词,我们需要使用"%s'\n "键。'%s'是指读取字符串直到最后。同时,'\n'将单词移到下一行。为了显示数组的内容,我们将不使用 "#"号。因为它只带来存在的元素的总数。

printf" printf"'%s'\\n" "{arr[@]}"

你可以从输出中观察到,每个词都显示在新行上。而且每个词都用单引号引出,因为我们在命令中提供了这个功能。这是可选的,你可以转换没有单引号的字符串。

例2

通常情况下,通过使用制表符和空格将一个字符串分解成数组或单字,但这通常会导致许多中断。我们在这里使用了另一种方法,那就是使用IFS。这个IFS环境处理显示了一个字符串是如何被分解并转换为小数组的。IFS的默认值是" \n\t"。这意味着空格、新行和制表符可以将数值传递到下一行。

在当前的例子中,我们不会使用IFS的默认值。但相反,我们将用一个单字符的换行来代替它,IFS=$'\n'。因此,如果你使用空格和制表符,将不会导致字符串断裂。

现在取三个字符串并将它们存储在字符串变量中。你会看到,我们已经通过使用制表符将这些值写到了下一行。当你打印这些字符串时,它将形成一个单行而不是三个。

$str=" 我是一个学生

我喜欢编程

我喜欢的语言是.net。"

echoecho str

现在是时候在命令中使用IFS的换行符了。同时,将变量的值分配给数组。声明之后,采取打印的方式。

IFS=IFS='\n'arr=( ${str} )

printf"printf"%s\\n" "{arr[@]}"

你可以看到结果。这表明每个字符串都被单独显示在一个新的行中。在这里,整个字符串被当作一个词来处理。

这里有一点需要注意:命令结束后,IFS的默认设置又被恢复了。

例3

我们也可以限制数组的值在每个换行时显示。取一个字符串并把它放在变量中。现在像我们之前的例子那样,将其转换或存储在数组中。并简单地用前面描述的同样方法取打印。

现在注意输入的字符串。这里我们在名字部分使用了两次双引号。我们已经看到,每当遇到句号时,数组就会在下一行停止显示。这里在双引号后使用了句号。因此,每个词将被显示在不同的行上。两个词之间的空格被视为一个中断点。

$x=( name=" Ahmad Ali But"。我喜欢读。"favsubject=Biology")

arr=(arr=( {x} )

printf"printf"%s/n" "{arr[@]}"

由于句号在 "Butt "之后,所以数组的中断在此停止。"I "在写的时候,句号之间没有任何空格,所以它和句号是分开的。

考虑一下另一个类似概念的例子。所以下一个词在句号后没有显示。所以你可以看到,只有第一个词被显示出来的结果。

$ x=(name="shawa"."fav subject"=" English")

例四

这里我们有两个字符串。在括号内各有3个元素。

$array1=(apple banana peach)

$array2=(mango orange cherry)

然后我们需要显示两个字符串的内容。声明一个函数。在这里,我们使用关键字 "typeset",然后将一个数组分配给一个变量,其他数组分配给另一个变量。现在我们可以分别打印这两个数组。

$ a () {

Typeset -nfirstarray=1secondarray=1 secondarray=2

Printf '%s\n' 1st:"${firstarray[@]}"

Printf '%s\n' 2nd: "${secondarray[@]}" }

现在要打印该函数,我们将使用该函数的名称和前面声明的两个字符串名称。

$ a array1 array2

从结果中可以看出,两个数组中的每个字都显示在一个新行中。

例5

这里声明了一个有三个元素的数组。为了在新的一行中分隔它们,我们使用了一个管道和一个用双引号引用的空格。数组中各自索引的每个值作为管道后的命令的输入。

$array=(Linux Unix Postgresql)

echoecho {array[*]}.| tr" " "/n"

这就是空格的作用,在新的一行中显示数组的每个字。

例6

我们已经知道,在任何命令中使用"\n "都会把后面的所有字移到下一行。这里有一个简单的例子来阐述这个基本概念。每当我们在句子的任何地方使用"\"与 "n",它就会导致下一行。

$ printf"%b\n" "All that glitters is \not gold"

所以这个句子被减半并移到下一行。向下一个例子,"%b\n "被替换。在这里,一个常数"-e "也被用于命令中。

$ echo-e "hello world!I am \new here"

因此,"\n "后面的字被移到下一行。

例七

我们在这里使用了一个bash文件。这是一个简单的程序。其目的是为了展示这里使用的打印方法。它是一个 "For循环"。每当我们通过一个循环来打印一个数组时,这也会导致数组在新行上的独立字数的断裂。

对于$a 中的字

Do

Echo$word

done

现在我们将从文件的命令中进行打印。

结论

有几种方法可以使你的数组数据在替代行上对齐,而不是在单行上显示。你可以在你的代码中使用任何给定的选项来使它们有效。