我有3个字符串:
p001="57 59 13 30 96 45 24 71 33 15 40"
p002="57 7 13 11 80 44 47 50 84 86 64"
p003="57 7 13 11 50 44 42 50 84 86 64"
基于mcount (001,002, or 003)
,我希望替换ptemp。但是我不知道如何“动态”创建一个新变量...
for mcount in {1..3}; do
pad_m=`printf "%03d" $mcount`
sed "s|PTEMP|p{pad_m}|; s|MTEMP|'${pad_m}'| " ./template.sh > .model.sh
这会导致错误。
我该怎么做?
template.sh
```
mnum=MTEMP
for pvar in PTEMP; do #Cycles through parameter files
pad_p=`printf "%03d" $pvar`
for svar in sq1 sq99; do
state_file=${mnum}/${svar}
./model.exe ${state_file}
done
done
```
答案 0 :(得分:1)
尽管我还没有完全理解您想做什么,但我的假设如下:
p001
,p002
或p003
的元素,它们的数量由mcount
索引,其范围为{1..3}。./model.exe
。然后您可以在下面说类似的内容,而无需生成.model.sh
脚本。
#!/bin/bash
p001="57 59 13 30 96 45 24 71 33 15 40"
p002="57 7 13 11 80 44 47 50 84 86 64"
p003="57 7 13 11 50 44 42 50 84 86 64"
for mcount in {1..3}; do
pad_m=$(printf "%03d" $mcount)
mnum=$pad_m
varname="p$pad_m" # will hold "p001", "p002" or "p003"
p=${!varname} # indirect variable referencing
for pvar in $p; do
pad_p=$(printf "%03d" "$pvar")
# echo "$pad_p" # for debugging
for svar in sq1 sq99; do
state_file="${mnum}/${svar}"
./model.exe "$state_file"
# echo "$state_file" # for debugging
done
done
done
如果我的假设不正确,请告诉我。
BR。