2014-02-05 108 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