将命令的多行输出读入 Bash 脚本中的变量

将命令的多行输出读入 Bash 脚本中的变量

我在 Bash 脚本中有以下行:

disk_info=$(smartctl -i $disk)

其中 $disk 是磁盘的名称,例如 /dev/sda 该命令的输出应该有很多行,我需要进一步将它们作为单独的行进行处理,但是变量 $disk_info 不包含任何换行符,只包含空格例如:

echo $disk_info
smartctl 7.1 2019-12-30 r5022 [x86_64-linux-5.15.0-56-generic] (local build) Copyright (C) 2002-19, Bruce Allen, Christian Franke, www.smartmontools.org === START OF INFORMATION SECTION === Model Family: WDC HGST Ultrastar He10 Device Model: WDC WD100EMAZ-00WJTA0 Serial Number: JEJ84B7N LU WWN Device Id: 5 000cca 267dfe25a Firmware Version: 83.H0A83 User Capacity: 10,000,831,348,736 bytes [10.0 TB] Sector Sizes: 512 bytes logical, 4096 bytes physical Rotation Rate: 5400 rpm Form Factor: 3.5 inches Device is: In smartctl database [for details use: -P show] ATA Version is: ACS-2, ATA8-ACS T13/1699-D revision 4 SATA Version is: SATA 3.2, 6.0 Gb/s (current: 6.0 Gb/s) Local Time is: Fri Mar 31 22:06:30 2023 CEST SMART support is: Available - device has SMART capability. SMART support is: Enabled

我做错了什么,因为输出最终是一行,而不是多行单独的行,由 LF 分隔

编辑:给将来遇到这个问题的人的提示:从接受的答案可以看出,我对这个问题的初步诊断是错误的

答案1

您没有引用该变量。

echo "$disk_info"

变量包含所有换行符,但 shell 将值扩展为参数echo。双引号括住变量可防止扩展。

相关内容