Home > database >  Bad substitution in Bash
Bad substitution in Bash

Time:01-10

I have written this code in which m getting bad substitution error. Please help here.

#!/bin/bash

function detect_value(){

    #some operation gives u a value
    echo "ABCD"

}

ABCD_COUNT=26

echo "${"$(detect_value)"_COUNT}"

bash run.sh run.sh: line 12: ${"$(detect_value)"_COUNT}: bad substitution

CodePudding user response:

The name of a parameter has to be static, not produced by another expression. To do what you want, you need to use indirect parameter expansion, where the name of the parameter to expand is stored in another parameter.

t=$(detect_value)_COUNT
echo ${!t}

Depending on your use case, you might want to use an associative array instead.

declare -A counts

counts[ABCD]=26

detect_value () {
    echo ABCD
}

echo "${counts[$(detect_value)]}"
  • Related