对函数中的局部变量看似毫无意义的eval

时间:2017-03-24 16:54:29

标签: bash function eval

我从一名前员工那里留下了一些遗留的bash代码来重写(并在我使用时添加文档)。我不知道最后两行eval的重点是什么,考虑到这些变量是本地的。

function gen_data_dir {
    local NAME="$1"
    local DB_DIR_VAR="$2"
    local TECH_DIR_VAR="$3"

    local CFG="$DB_CONFIGS_DIR/$NAME"
    if [[ ! -f "$CFG" ]]; then
        echo "no config: $CFG" > /dev/stderr
        return 127
    fi
    echo "processing config: $CFG" > /dev/stderr

    local DB_DIR_="$ANNO_DB_DIR/${NAME}"
    mkdir -p "$DB_DIR_" || return 127

    pushd "$DB_DIR_"
    LC_ALL=C date > DATES
    touch _SHIT

    local TECH_="$DB_DIR_/tech"
    mkdir -p "$TECH_"
    cat "$CFG" > "$TECH_/orig.cfg"
    ${GENOME_DIR}/annotation/parse_db_configs.py "$CFG" "$TECH_"

    rm _SHIT
    popd

    eval "$DB_DIR_VAR"="$DB_DIR_"
    eval "$TECH_DIR_VAR"="$TECH_"
}

我错过了什么吗?我是否正确地假设开始使用DB_DIR_VARTECH_DIR_VAR毫无意义,因为它们的初始值从未使用过?

1 个答案:

答案 0 :(得分:1)

它没有设置DB_DIR_VARTECH_DIR_VAR - 它设置了在这两个变量中设置名称的变量。因此,如果DB_DIR_VAR等于THE_DB_DIR,则会将THE_DB_DIR设置为DB_DIR_的值。