我想将命令的结果存储到数组变量中。我遇到了麻烦,因为命令本身包含必须在执行之前解析的变量。例如:
for ((i=1; i<=4; i++)); do
NEXT=$(( i + 1 ))
MYARRAY[i]=$(cat $VARIABLE | uniq | sed -n '$NEXTp')
done
&#34; cat $ VARIABLE&#34;命令正在正确处理。问题在于&#34; $ NEXT&#34;替换后紧接着是&#34; p&#34;字符。如何在执行命令之前强制脚本解析$ NEXT变量并将结果存储在MYARRAY [i]中?
感谢。
答案 0 :(得分:1)
在表达式中使用它之前,您可以将'p'添加到NEXT
:
for ((i=1; i<=4; i++)); do
NEXT=$(expr $i + 1)
NEXT+='p'
MYARRAY[i]=$(cat $VARIABLE | uniq | sed -n $NEXT)
done
答案 1 :(得分:1)
您可以使用以下脚本:
for ((i=1; i<=4; i++)); do
NEXT=$(expr $i + 1)
MYARRAY[i]=$(cat $VARIABLE | uniq | sed -n $NEXT'p')
done
答案 2 :(得分:1)
典型的解决方案是:${NEXT}p
请注意,您所做的事情是相当不典型的。通常使用以下内容分配给数组:
IFS='
'
MYARRAY=( $( < $VARIABLE uniq | sed -n 1,5p ))
这将指定MYARRAY [0],原始代码不会这样做,但我不清楚这是故意还是尝试调整索引。和往常一样,UUOC是不鼓励的,尽管uniq
可以将$ VARIABLE作为参数,但使用重定向是一个很好的习惯,所以我在示例中使用它来演示一种简单的方法来消除UUOC 99.9%的案例出现。