이 질문은 다른 질문과 관련하여 질문되었습니다.여기
다음 명령의 출력을 배열에 저장하고 여기에서 두 번째 값을 추출하려고 하는데 가져올 수 없습니다.
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
대신 다음을 사용하세요.grep
cut
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