2017-03-24 1 views
1

以前の従業員から書き直された(そして私が書いている間にドキュメントを追加する)レガシーbashコードが残っています。私はこれらの変数がローカルであると考えて、最後の2つの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

DB_DIR_VARTECH_DIR_VARは設定されていません。これらの2つの変数に名前が設定されている変数が設定されています。したがって、DB_DIR_VARTHE_DB_DIRに等しい場合は、THE_DB_DIRDB_DIR_の値に設定します。