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"... 이 루프 에 전달됩니다 .