创建一个逗号分隔的列表,其中包含以前缀开头的所有变量的名称

时间:2014-12-12 20:06:29

标签: bash qsub

我目前正在尝试编写一个Bash脚本,该脚本可以向SGE QSUB群集提交多个作业,并向每个作业提交一些环境变量。

为了将变量传递给每个作业,我需要列出我想要作为单个字符串传递的所有变量(以逗号分隔列表的形式,如'var1={var1},var2={var2}')。

我想知道如何自动化这个过程。具体来说,我想编写一个执行以下操作的脚本:

1)收集以特定前缀开头的所有变量的名称 2)从这些名称中删除前缀 3)创建逗号分隔列表

例如,请考虑以下脚本(前缀为jobvar):

jobvar_my_vector=(0.1 2.00 3.00)
jobvar_my_string="hello"
other_variable="yesyesyes"

这里的命令基本上会生成一个变量list_of_variables,它就像一个字符串: "my_string=${my_string},my_vector=${my_vector}"

1 个答案:

答案 0 :(得分:2)

您可以在POSIX模式下使用set命令列出所有变量。然后使用管道来解析变量并获得所需的输出。

s=$(set -o posix; set | awk -F '(jobvar_|=)' '/^jobvar_/{printf "%s=${%s},", $2, $2}')
echo "$s"
my_string=${my_string},my_vector=${my_vector},

在BASH中,您还可以使用compgen -v来获取所有变量:

s=$(compgen -v | awk -F '(jobvar_|=)' '/^jobvar_/{printf "%s=${%s},", $2, $2}')
echo "$s"
my_string=${my_string},my_vector=${my_vector},