How to let bash variable continue get value?

26 Views Asked by At

our server have different gcc version, and sometime we need to swtich different gcc version base on different project.

And I don't want to hard code the gcc in my bashrc,

so I want to write a bash function to switch different GCC version while using build tool like:

#gcc4
export CXX4="/usr/local/brion_AVX/gcc/current/bin/c++"
export CC4="/usr/local/brion_AVX/gcc/current/bin/gcc"
export GCC4="/usr/local/brion_AVX/gcc/current/bin/g++"

#gcc7
export CXX7="/usr/local/brion_AVX/gcc/7.3.1_3/bin/c++"
export CC7="/usr/local/brion_AVX/gcc/7.3.1_3/bin/gcc"
export GCC7="/usr/local/brion_AVX/gcc/7.3.1_3/bin/g++"

#gcc12
export CXX12="/group/DEV/GUI/SHARED/gcc/12.2.0/bin/c++"
export CC12="/group/DEV/GUI/SHARED/gcc/12.2.0/bin/gcc"
export GCC12="/group/DEV/GUI/SHARED/gcc/12.2.0/bin/g++"

gcc_switch()
{
    g1=CXX$1
    g2=CC$1
    g3=GCC$1
    export CXX=$g1
    export CC=$g2
    export GCC=$g3
    echo "switch gcc to $CXX"
}

then when I run "gcc_switch 12", it switch to gcc 12, and export GCC as gcc12 path,

But it doesn't, seem CXX12 will just a string, the CXX=$g1 doesn't get the real value of g1.

I can write the "gcc_swtich" function and work expect using if condition like:

gcc_switch()
{
    if [[ $1 == 4 ]]; then
        export CXX=$CXX4
        export CC=$CC4
        export GCC=$GCC4
    elif [[ $1 == 7 ]]; then
        export CXX=$CXX7
        export CC=$CC7
        export GCC=$GCC7
    elif [[ $1 == 12 ]]; then
        export CXX=$CXX12
        export CC=$CC12
        export GCC=$GCC12
    fi

    echo "switch gcc to $CXX"
}

But it doesn't seems elegant and flexible, is it posible to make the frist gcc_switch function works without using if in bash function with using map?

0

There are 0 best solutions below