gpt4 book ai didi

linux - 对于 bash 脚本,是否有类似于 C/C++ 中的#define 的内容?

转载 作者:太空宇宙 更新时间:2023-11-04 09:18:09 25 4
gpt4 key购买 nike

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

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

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

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

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

最佳答案

不,无论引用上下文如何,您都不能执行预处理。这是因为在 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");

关于linux - 对于 bash 脚本,是否有类似于 C/C++ 中的#define 的内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44855038/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com