2013-02-09 71 views
0

我目前正在研究一個旨在爲任何基本編輯器添加新項目代的腳本。 我才能產生正確的基本程序根據用戶選擇的語言中使用以下結構(你好,世界):

#!/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; } 

然而,通過更換線13時回聲-n 「$ TXTMAIN_C」 >> 「$ MAIN」,它給出正確的輸出:

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

我還是不知道這是一個回聲或eval問題,或者是否有解決指針類問題的方法。 任何建議都非常歡迎!

+1

單引號是你的朋友。寫起來容易多了:'TXTMAIN_C ='#include ...'因爲你不需要轉義「或\。 – 2013-02-09 13:43:09

回答

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 
+0

那麼,那是很快......謝謝,你回答我的需要! – Aserre 2013-02-09 13:42:26