我是 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,然后$()
执行该部分。