
lshwから結果を取得し、bash配列に追加して新しい文字列を作成しようとしています。使っています
lshw -class disk |egrep -A 7 .'-d' |grep 'product' |cut -b 17-
出力は次のとおりです
Samsung SSD 850
Samsung SSD 840
ST8000AS0002-1NA
ST8000AS0002-1NA
Samsung SSD 870
Samsung SSD 870
ST8000VN0022-2EL
Flash Drive FIT
Flash Drive FIT
ST8000AS0002-1NA
ST8000VN0022-2EL
Samsung SSD 870
Samsung SSD 870
ST8000VN004-2M21
この出力をbash配列に追加しようとしましたが、スペースで区切られた単語の各行が配列の要素になります。このコマンドの結果も表示できます。
for w in $(lshw -class disk |egrep -A 7 .'-d' |grep 'product' |cut -b 17-); do printf "$w \n" ;done
出力
Samsung
SSD
850
Samsung
SSD
840
ST8000AS0002-1NA
ST8000AS0002-1NA
Samsung
SSD
870
Samsung
SSD
870
ST8000VN0022-2EL
Flash
Drive
FIT
Flash
Drive
FIT
ST8000AS0002-1NA
ST8000VN0022-2EL
Samsung
SSD
870
Samsung
SSD
870
ST8000VN004-2M21
スペースで区切られた行を文字列として保持するには?
答え1
mapfile
おそらく最も簡単です。
mapfile -t myarray < <(lshw -class disk |egrep -A 7 .'-d' |grep 'product' |cut -b 17-)
ただし、リテラル配列を使用せずに結果のみを繰り返す場合は、次のことができます。
lshw -class disk |egrep -A 7 .'-d' |grep 'product' |cut -b 17- | while read w ; do [something with w] ; done
答え2
引用コマンドの置き換え:
# for w in "$(lshw -class disk |egrep -A 7 .'-d' |grep 'product' |cut -b 17-)"; do printf "$w \n" ;done
USB3.0 DISK00
USB3.0 DISK01
USB3.0 DISK02
MS/MS-Pro
SD/MMC
Compact Flash
SM/xD-Picture
ST1000DM003-1CH1
WDC WD20EZAZ-00G
for
これにより、「USB3.0 DISK00」「USB3.0 DISK01」...がループに渡されます。