2014-02-05 5 views
0

"컴파일"이라는 두 번째 Bash 스크립트를 작성하는 "NewProject"라는 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 

컴파일 스크립트 '$1'을 포함, 대신 'testproject4'의 그래서 나는 NewProject 스크립트를 변경할 수 있습니까?

+1

, 그렇지 않습니다 ''에 . 또한 "주위에"("파일 이름이 누락되었습니다 ..."비트) 내부에 있음을 유의하십시오.이 경우에는 echo가 모든 인수를 문자열로 구분하여 반향하기 때문에 문제가되지 않습니다. 어쨌든) –

답변

0

나는 그것을 효과적으로 전체 문서를 인용 히어 닥

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 

을 사용

""에서 $는 해석됩니다
3

더 정확하게 인용해야합니다.

echo "$1" >>$1/compile 

은 NewProject의 첫 번째 인수 값을 컴파일 스크립트에 추가합니다. 그러나

:

echo '$1' >>$1/compile 

는 컴파일 스크립트에 정확히 $1 문자를 추가합니다. 당신이 (cat <<'END'을)를 히어 닥 터미네이터 말을 인용하면

+0

BTW : [echo-if [[-z '$ 1']]; then echo "파일 이름이 없습니다. 입력 : compile -o 실행 파일. "exit 1 fi">> $ 1/compile'은 예상대로 작동하지 않습니다. 이중 따옴표는 중첩 될 수 없으므로 'echo "는"aa bb cc dd "ee">> $ 1/엮다. 당신은'''-s ('echo''aa \ "bb cc dd \"ee ">> $ 1/compile') 내부를 벗어나거나'''-s를'''-s로 둘러싸 야합니다. – Sasha

+0

'$ 1'을 컴파일에 삽입하려면 작은 따옴표 ('echo '$ 1'> ...')를 사용하거나 백 슬래시 ('echo "\ $ 1">> ...')를 사용하여'$'를 이스케이프 할 수 있습니다. – Sasha

관련 문제