这个问题是参考其他问题提出的这里
我试图将以下命令的输出存储到一个数组中并从中提取第二个值,但无法获取。
我的输出看起来像是将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:)
或者,使用andawk
代替: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