我目前正在尝试编写一个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}"
答案 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},