从 cut 语句生成带有空格分隔符的单词字符串

从 cut 语句生成带有空格分隔符的单词字符串

我是 bash 新手。当我运行以下命令时:

grep "type" /root/myFile | cut-d'=' -f2

我得到以下信息:

102
304
503
442

我想将第一个命令的内容存储到一个变量中,这样该变量的内容就相当于这样声明它:

myVariable="102 304 503 442"

我不知道该怎么办。我是否myVariable使用空字符串进行初始化并逐行遍历命令行的内容并将其附加到 myVariable 中,中间有空格,或者是否有更简单的方法可以使用 bash 执行此操作?

答案1

您可以bash使用命令替换然后参数扩展来自行完成此操作。

首先使用命令替换将命令的输出放入变量中$(),然后使用参数扩展将所有换行符替换为空格${variable//$'\n'/ }

$ myVariable=$(grep "type" /root/myFile | cut-d'=' -f2) 
$ myVariable=${myVariable//$'\n'/ }
$ echo $myVariable
102 304 503 442

但为了可重用性和清洁性,最好使用数组:

myArray=( $(grep "type" /root/myFile | cut-d'=' -f2) )

并以通常的方式迭代数组元素。

答案2

myVariable=`grep "type" /root/myFile | cut-d'=' -f2`

运行反引号 (`) 之间的内容并将输出分配给myVariable.

如果您当前的输出由换行符 ( \n) 分隔,那么您可能需要将它们替换为空格,例如tr

myVariable=`grep "type" /root/myFile | cut-d'=' -f2`|tr '\n' ' '`

注意:有些人更喜欢使用$()语法而不是反引号,但两者都很有用,当我可以选择时,我会使用反引号。两者兼具的真正优点是,如果您想在两个级别处理执行,因为反引号表达式将首先发送到子 shell,然后$()执行该部分。

相关内容