操作优先

时间:2014-05-01 14:21:56

标签: linux shell unix

我想将命令的结果存储到数组变量中。我遇到了麻烦,因为命令本身包含必须在执行之前解析的变量。例如:

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]中?

感谢。

3 个答案:

答案 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%的案例出现。