파이프 명령의 배열 실패

파이프 명령의 배열 실패

우선, 이 질문이 이전에 제기된 경우 사과드립니다. 여기와 StackOverflow에서 검색하고 매뉴얼 페이지를 시도했지만 여전히 공백을 그리는 중입니다.

시작 시 서버의 아카이브 드라이브를 자동으로 마운트하는 스크립트를 작성하려고 합니다(컴퓨터에 연결된 모든 항목은 보안상의 이유로 자동으로 마운트되지 않습니다).

내가 지금까지 가지고 있는 것은 이것입니다:

#! /bin/bash
archives=( `ls /dev/disk/by-label/ | sed -rn 's/.*archive\\x20(.*)/\1/Ip'|sort -d`)

echo "Output of the Commands piped to array:"
for arcNum in ${archives[@]}; do
    echo "mounting Archive: $arcNum"
done

echo "Desired Output of Command:"
ls /dev/disk/by-label/ | sed -rn 's/.*archive\\x20(.*)/\1/Ip'|sort -d

이를 실행하면 터미널에 다음 결과가 생성됩니다.

user@machine:~$ autoLoadArchives
Output of the Commands piped to array:
Desired Output of Command:
2
4
6
user@machine:~$

sed에서 -n 플래그와 p 명령을 제거하면 다음과 같습니다.

ls /dev/disk/by-label/ | sed -r 's/.*archive\\x20(.*)/\1/I'|sort -d

배열에는 필터링되지 않은 원래 목록이 있지만 명령줄 버전에서는 필터링되지 않은 목록이 적절하게 교체되고 정렬되었습니다.

user@machine:~$ autoLoadArchives
output of the Commands piped to array:
mounting Archive: Archive\x206
mounting Archive: MY-USB
mounting Archive: PFI\x20ARCHIVE\x202
mounting Archive: PFI\x20Archive\x204
Desired Output of Command:
2
4
6
MY-USB
user@machine:~$ 

출력 $ ls /dev/disks/by-label/:

user@machine:~$ ls /dev/disk/by-label/
Archive\x206  MY-USB  PFI\x20ARCHIVE\x202  PFI\x20Archive\x204
user@machine:~$ 

나는 내 문제가 어리석은 초보자의 문제일지도 모른다는 끔찍한 느낌을 받았지만 솔직히 여기서 무슨 일이 일어나고 있는지 전혀 모릅니다.

답변1

백틱은 일부 특수 문자(예: 백슬래시)를 해석합니다. 대신 사용하십시오 $( ... ).

archives=( $(ls /dev/disk/by-label/ \
             | sed -rn 's/.*archive\\x20(.*)/\1/Ip' \
             | sort -d) )

관련 정보