我目前正在制作一个脚本,旨在为任何基本编辑器添加新的项目生成。 我正在使用以下结构,以便根据用户选择的语言生成正确的基本程序(hello,world):
#!/bin/sh
#this is a short example in the case the user selected C as the language
TXTMAIN="\$TXTMAIN_C"
$TXTMAIN_C="#include <stdlib.h>
#include <stdio.h>
int main(int argc, char const* argv[])
{
printf(\"hello, world\n\");
return EXIT_SUCCESS;
}"
MAIN="./main.c"
touch MAIN
echo -n "$(eval echo $TXTMAIN)" >> "$MAIN"
gedit MAIN
编辑main.c时,这段代码提供了以下输出:
#include <stdlib.h> #include <stdio.h> int main(int argc, char const* argv[]) { printf("hello, world\n"); return EXIT_SUCCESS; }
但是,当用echo -n“$ TXTMAIN_C”&gt;&gt;替换第13行时“$ MAIN”,它给出了正确的输出:
#include <stdlib.h>
#include <stdio.h>
int main(int argc, char const* argv[])
{
printf("hello, world\n");
return EXIT_SUCCESS;
}
我仍然不知道这是一个回声或评估问题,或者是否有类似指针问题的方法。 非常欢迎任何建议!
答案 0 :(得分:4)
您的脚本中存在一些错误,并且它应该比它应该更复杂。
如果您想使用这样的间接变量,请使用${!FOO}
语法,并在适当的地方加上引号:
#!/bin/sh
#this is a short example in the case the user selected C as the language
TXTMAIN=TXTMAIN_C # don't force a $ here
TXTMAIN_C="#include <stdlib.h>
#include <stdio.h>
int main(int argc, char const* argv[])
{
printf(\"hello, world\n\");
return EXIT_SUCCESS;
}"
MAIN="./main.c"
echo "${!TXTMAIN}" > "$MAIN" # overwrite here, if you want to
# append, use >>. `touch` is useless