我想为for循环中的每个循环grep一个特定的行。我已经在互联网上查看了我的问题的答案,我尝试了它们,但它似乎对我不起作用......而且我找不到我做错了什么。
以下是代码:
for n in 2 4 6 8 10 12 14 ; do
for U in 1 10 100 ; do
for L in 2 4 6 8 ; do
i=0
cat results/output_iteration/occ_"$L"_"$n"_"$U"_it"$i".dat
for k in $(seq 1 1 $L) ; do
${'var'.$k}=`grep " $k " results/output_iteration/occ_"$L"_"$n"_"$U"_it"$i".dat | tail -n 1`
done
给了我:
%
%
% site density double occupancy
1 0.49791021 0.03866179
2 0.49891438 0.06077808
3 0.50426102 0.05718336
4 0.49891438 0.06077808
./run_deviation_functionL.sh: line 109: ${'var'.$k}=`grep " $k " results/output_iteration/occ_"$L"_"$n"_"$U"_it"$i".dat | tail -n 1`: bad substitution
然后,我只想采用密度数字,例如:
${'density'.$k}=`echo "${'var'.$k:10:10}" | bc -l`
有人知道它失败的原因吗?
答案 0 :(得分:2)
使用declare
从变量创建变量名称:
declare density$k="`...`"
使用变量间接检索它们:
var=var$k
echo ${!var:10:10}