设置包含'>'的变量名称在bash中

时间:2017-04-28 18:38:32

标签: bash variables

我必须使用bash脚本(我不熟悉bash)来提交HPC作业。作业提交脚本模板设置命令和选项,然后将它们组合在一起:

input="file_name"
name="simulation1"

application=my_app
options="in=$input.h5 out=$name.h5 param1=foo"

cmd="$application $options"

一切正常,即eval $cmd执行

my_app in=$input.h5 out=$name.h5 param1=foo

直到我需要字符'>'在选项中。特别是,我想添加选项absrad="mass>1?H:0",但如果我只是设置

options="in=$input.h5 out=$name.h5 param1=foo absrad=mass>1?H:0"

然后bash在'>'处截断,以便eval $cmd执行

my_app in=$input.h5 out=$name.h5 param1=foo absrad=mass

代替。如何修复eval $cmd执行

my_app in=$input.h5 out=$name.h5 param1=foo absrad="mass>1?H:0"

EDIT。请注意,这与this post类似,但不重复,其中单引号参数是问题。而且,那里的答案只考虑使用数组作为选项的解决方案。我想要没有阵列的替代品。

1 个答案:

答案 0 :(得分:1)

您总是可以使用数组作为选项:

declare -a options=("in=$input.h5" "out=$name.h5" "param1=foo" "absrad=\"mass>1?H:0\"");
declare -a cmd=(my_app "${options[@]}");

然后,当您想展开cmd时,以下内容应该为您提供正确的扩展:

"${cmd[@]}"

此外,这消除了使用eval的需要,我倾向于尽可能避免使用{。}}。