嵌套的shell变量,不使用eval

nac*_*cab 9 bash shell eval

我可以摆脱eval这里吗?我试图设置$current_database由用户输入(国家和行动)确定的适当变量

# User input
country="es"
action="sales"

# Possible variables for current_database
final_es_sales_path="blahblah/es/sales.csv"
final_en_support_path="yadayada/en/support.csv"
final_it_inventory_path="humhum/it/inventory.csv"
...

current_database=$(eval echo \${final_${country}_${action}_path})
Run Code Online (Sandbox Code Playgroud)

Die*_*lla 9

您可以使用关联数组,连接两个变量的值.例如:

declare -A databases
# initialization
databases["es:sales"]="blahblah/es/sales.csv"
databases["en:support"]="yadayada/en/support.csv"
Run Code Online (Sandbox Code Playgroud)

然后,您可以通过以下方式获取数据库:

echo ${databases["${country}:${action}"]}
Run Code Online (Sandbox Code Playgroud)

这具有仅由一个变量收集数据库名称的优点.