Linux awk将换行符转换为变量的麻烦

问题描述 投票:0回答:1

我发现了很多主题,但找不到与我的情况完全相符的东西。

当我在脚本中运行以下命令:sudo lshw -C disk -short | grep "/dev/"时,我的hdds变量将设置为/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

我实际上设法做到了,但是我不能将该结果分配给我的变量。仅在运行live命令时才有输出。

#!/bin/bash

hdds=`sudo lshw -C disk -short | grep "/dev/" | awk '{print $2,$4,$5,$6,$7,$8,$9}'`
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下执行此操作。

bash variables awk printing echo
1个回答
0
投票

我的最佳猜测是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/Quoteshttp://mywiki.wooledge.org/BashFAQ/082,以获取有关脚本中引号和对勾问题的信息。

© www.soinside.com 2019 - 2024. All rights reserved.