우선, 이 질문이 이전에 제기된 경우 사과드립니다. 여기와 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) )