2014-02-05 107 views
0

我在寫一個名爲「NewProject」的Bash,它創建了第二個名爲「compile」的Bash腳本。這兩個腳本都必須能夠將參數作爲輸入。我的問題是我不能在編譯腳本中寫入「$ 1」 - 這只是將NewProject的第一個參數的內容複製到編譯腳本中。這是創建編譯腳本的NewProject腳本的一部分。用變量創建bash腳本的bash腳本

echo "#!/bin/bash" > $1/compile 
echo " 
if [[ -z '$1' ]]; 
then 
     echo "You are missing file names. Type in: compile -o executable files." 
     exit 1 
fi" >> $1/compile 
chmod u+x $1/compile 

這裏是從NewProject腳本的測試運行輸出。

#!/bin/bash 

if [[ -z 'testproject4' ]]; 

then 
     echo You are missing file names. Type in: compile -o executable files. 
     exit 1 
fi 

我怎樣才能改變NewProject腳本所以,與其'testproject4',編譯腳本包含'$1'

+1

$的「」被解釋的,在'它不。還要注意,你有內部的「在你的周圍」(「你缺少文件名......」位),這可能不是你想要的(在這種情況下它並不重要,因爲回聲會回顯所有由字符串分隔的參數無論如何) –

回答

0

當你引用定界符終止字(cat <<'END')我會用一個定界符

cat <<'END' > "$1"/compile 
#!/bin/bash 

if [[ -z $1 ]]; 
then 
     echo "You are missing file names. Type in: compile -o executable files." 
     exit 1 
fi 
END 
chmod u+x "$1"/compile 

,它有效地引用完整的DOC

3

你應該更加準確地引用。

echo "$1" >>$1/compile 

將把NewProject的第一個參數的值附加到編譯腳本中。

但是:

echo '$1' >>$1/compile 

將正好$1字符追加到編譯腳本。

+0

順便說一句:'echo「if [[-z'$ 1']];然後echo」你缺少文件名。鍵入:編譯-o可執行文件。「exit 1 fi」>> $ 1/compile'將無法按預期工作。雙引號不能嵌套,因此'echo「aa」bb cc dd「ee」>> $ 1/compile'會將'aa bb''cc''dd ee'(而不是'aa「bb cc dd」ee')附加到編譯。你應該用''''''-s('echo「aa \」bb cc dd \「ee」>> $ 1/compile'),或''''''-s''''''-s。 – Sasha

+0

要將'$ 1'插入到編譯中,可以使用單引號('echo'$ 1'> ...')或用反斜線('echo「\ $ 1」>> ...'')轉義'$'。 – Sasha