명령의 출력을 배열에 넣고 특정 위치 값을 추출합니다.

명령의 출력을 배열에 넣고 특정 위치 값을 추출합니다.

이 질문은 다른 질문과 관련하여 질문되었습니다.여기

다음 명령의 출력을 배열에 저장하고 여기에서 두 번째 값을 추출하려고 하는데 가져올 수 없습니다.

cat내 출력은 내 배열에도 저장되고 인쇄 될 것 같습니다 .해당 파일이나 디렉터리가 없습니다., 어떻게 이런 일이 일어났는지 이해가 안 돼요.

#!/bin/sh

array=($(cat $(openssl asn1parse -inform der -in $1 | grep id-smime-aa-pattern -A 1 | cut -f1 -d:)))
echo ${array[1]}

# Below combinations also does not work
#echo startnum:"$(openssl asn1parse -inform der -in $1 | grep id-smime-aa-pattern -A 1 | cut -f1 -d:)" > array
#array=($(cat "$(openssl asn1parse -inform der -in $1 | grep id-smime-aa-pattern -A 1 | cut -f1 -d:)"))

산출:

cat:7430: 해당 파일 또는 디렉터리 없음
cat:7567: 해당 파일 또는 디렉터리 없음

행의 두 번째 값을 추출하도록 스크립트를 어떻게 변경합니까?

답변1

$ readarray -t array <<< $(openssl asn1parse -inform der -in "$1" | 
                             grep id-smime-aa-pattern -A 1 |
                             cut -f1 -d:)

또는 awk대신 다음을 사용하세요.grepcut

readarray -t array <<< $(openssl asn1parse -inform der -in "$1" |
                           awk -F: '/id-smime-aa-pattern/ {print $1; getline; print $1}')

이전 질문의 예제 입력을 고려하면 위 명령 중 하나를 사용하면 다음을 포함하는 $array가 생성됩니다.

$ declare -p array
declare -a array=([0]="7430" [1]="7567")

또는 해당 줄의 출력을 원하는 경우뒤쪽에 id-smime-aa-pattern, 배열을 사용할 필요가 없습니다.

$ foo=$(openssl asn1parse -inform der -in "$1" |
          awk -F: '/id-smime-aa-pattern/ {getline; print $1}')
$ echo $foo
7567

관련 정보