代码之家  ›  专栏  ›  技术社区  ›  maximusdooku

如何在bash中动态创建变量?

  •  -1
  • maximusdooku  · 技术社区  · 7 年前

    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 回复  |  直到 7 年前
        1
  •  1
  •   tshiono    7 年前

    • p001 , p002 p003 ,其编号由索引索引 mcount
    • 执行 ./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
    

    如果我的假设不正确,请告诉我。