从多个相似类型的环境变量创建数组

从多个相似类型的环境变量创建数组

我想制作一个 bash 脚本,它将采用 3 个不同的变量,并根据另一个变量的设置仅返回一个变量。因此,如果

TESTA_HOST=test1.google.com
TESTB_HOST=test2.google.com
TESTC_HOST=test3.google.com
M_INDEX=2

我们想要搜索所有以_HOST数组结尾的环境变量,然后我们可以用它来与索引进行比较。

HOSTS="$(compgen -A variable | grep _HOST)"
export MAIN_URI="${HOSTS[M_INDEX]}"
echo $MAIN_URI

预期的输出是test3.google.com这不起作用,因为它只是返回变量名称而不是变量内容。我在这里缺少什么?

答案1

这,

HOSTS="$(compgen -A variable | grep _HOST)"

设置HOSTS为单个字符串

测试主机[新队]TESTB_HOST[新队]测试主机

对其建立索引不是很有用,与 、等${HOSTS[0]}相同,将为空。${HOSTS}${HOSTS[1]}

相反,如果您分配

HOSTS=( $(compgen -A variable | grep _HOST) )

然后 的输出compgen将被分词(并扩展为全局),并HOSTS成为包含结果的数组。该数组的值是变量的名称,您需要间接引用来获取它们的值。现在,这将扩展到“指向”变量的值index

"${!HOSTS[M_INDEX]}"

请注意,数组赋值假定您具有默认值IFS,并且变量中不能包含任何空格或通配符。


请注意,如果您的变量被命名为HOST_thisHOST_that(前面有固定部分),您可以使用 生成它们的名称列表"${!HOST_@}",并将其直接分配给数组,而不涉及compgengrep或分词。

相关内容