0

我目前正在编写一个脚本,旨在为任何基本编辑器添加新的项目生成。我使用以下结构来根据用户选择的语言生成正确的基本程序(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" >> "$MAIN" 替换第 13 行时,它会给出正确的输出:

#include <stdlib.h>
#include <stdio.h>
int main(int argc, char const* argv[])
{
    printf("hello, world\n");
    return EXIT_SUCCESS;
}

我仍然不知道这是回声还是评估问题,或者是否有办法解决我的类似指针的问题。非常欢迎任何建议!

4

1 回答 1

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
于 2013-02-09T13:31:32.173 回答