在BASH脚本中使用字符串作为变量名

时间:2011-12-08 17:44:46

标签: bash

我有以下内容:

#!/bin/sh

n=('fred' 'bob')

f='n'
echo ${${f}[@]}

我需要在替换后执行

的底线
echo ${n[@]}

任何方式这样做?我得到了

test.sh: line 8: ${${f}}: bad substitution

在我的结尾。

2 个答案:

答案 0 :(得分:16)

你可以使用这样的数组进行变量间接:

subst="$f[@]"
echo "${!subst}"

正如soulmerge所说,你不应该使用#!/bin/sh。我使用#!/usr/bin/env bash作为我的shebang,无论Bash在你的路上在哪里都可以使用。

答案 1 :(得分:5)

您可以eval所需的行:

eval "echo \${${f}[@]}"

BTW:你的第一行应该是#!/bin/bash,你正在使用像阵列这样的特定于bash的东西