Как я могу динамически создать переменную в Bash? - PullRequest
0 голосов
/ 29 ноября 2018

У меня есть 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
```

1 Ответ

0 голосов
/ 29 ноября 2018

Хотя я не до конца понял, что вы хотите сделать, я предполагаю следующее:

  • Для циклического перебора элементов 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...