在C / C ++中是否有类似于#define的bash脚本?

时间:2017-06-30 21:27:39

标签: linux bash shell variables root

我目前正在编写一个调用一些程序的脚本,例如:

root -l -q Analysis.C+'("var1", "var2", "var3")'

我现在想要一个bash脚本,它会自动用var1,var2,var3等替换用户输入。但是,如果我写了类似

的内容
root -l -q Analysis.C+'("$1", "$2", "$3")'

这似乎不起作用,因为它解释了$ 1,因此它是字符串而不是变量。在C / C ++中有类似于#define的东西,在运行之前,变量在整个脚本中被替换了吗?或者如何做到这一点?

1 个答案:

答案 0 :(得分:2)

不,无论引用上下文如何,都无法执行预处理。这是因为在shell中引用上下文的非常重要是控制哪种替换发生和不发生。如果您可以定义单引号中发生的替换,那么单引号在shell中的含义(其中的字符被视为文字而不受扩展)将会丢失。

这样做会看起来像:

root -l -q Analysis.C+'("'"$var1"'", "'"$var2"'", "'"$var3"'");'

也就是说:单引号上下文结束,并在每次参数替换之前启动双引号上下文。

这可以在下面看到:

$ var1=a; var2=b; var3=c
$ printf '%s\n' root -l -q Analysis.C+'("'"$var1"'", "'"$var2"'", "'"$var3"'");'
root
-l
-q
Analysis.C+("a", "b", "c");