Linux awk 变量换行的问题

Linux awk trouble with linebreak into a variable

我找到了很多主题,但找不到符合我的确切情况的内容..

当我 运行 在脚本中执行以下命令时:sudo lshw -C disk -short | grep "/dev/",我的 hdds var 将设置为 /dev/sda 32GB VMware Virtual S /dev/cdrom VMware IDE CDR10.

而且我可以使用 awk 删除“/dev/”,但我会用 /n 添加一个换行符,所以当我执行 echo $hdds 时,它会显示类似这样的内容(而不是在一行中显示所有内容):

sda 32GB VMware Virtual S
cdrom VMware IDE CDR10

我实际上设法做到了,但我无法将该结果分配给我的变量。只有当我在 运行 运行实时命令时获得输出时。

#!/bin/bash

hdds=`sudo lshw -C disk -short | grep "/dev/" | awk '{print ,,,,,,}'`
hdd=`echo $hdds | awk '{split($hdds,hdd,"/dev/"); print hdd[2]; print " HEY \n"; print hdd[3]}'`
echo $hdd | awk '{print $hdd;}'

感谢帮助! 目前正在尝试在 ubuntu 18.04.

下执行此操作

我最好的猜测是 sudo lshw -C disk -short 已经产生了多行输出,而您遇到的主要问题是您没有引用 echo 的参数,在这种情况下,您只需要:

hdd=$(sudo lshw -C disk -short | sed -n 's:/dev/::p')
echo "$hdd"

但没有看到 sudo lshw -C disk -short 的输出和您预期的最终输出,这只是一个未经测试的猜测。

有关脚本中引号和刻度问题的信息,请参阅 https://mywiki.wooledge.org/Quotes and http://mywiki.wooledge.org/BashFAQ/082