2013-04-09 2 views
1

사용자 입력이있는 시작 유닉스/리눅스 클래스를위한 bash 스크립트를 작성하고 있습니다. 나는 사용자 입력을 주어진 달력을 실행하는 방법을 잘 모르겠습니다.주어진 달과 연도에 리눅스에서 cal 함수를 실행하십시오.

다음은 내가 가지고있는 것입니다. 당신이 echo 사용하는 경우

#!/bin/bash 
echo -n "Enter the month you wish displayed: "; read month 
echo -n "Enter the year you wish displayed: "; read year 
echo cal '$month' '$year' 
+2

단지'cal $ month $ year'만으로도 충분합니다.'echo'는'''변수를 감싸지 않아도됩니다. – fedorqui

+2

' '는 쉘이 변수 ('$')를 확장하는 것을 막습니다. 그것들을 밖으로 꺼내. 또한 - 당신은'cal'을 실행하고'echo'하지 않습니다. 그래서 'cal $ month $ year'만으로도 충분합니다. – Floris

+1

용어 설명 quibble :'cal'은 명령이 아니라 함수입니다. –

답변

1

는, (쉘에 의해 수 처리 후) 라인의 나머지 stdout 출력을 얻는다 (또는 아마도 다음 프로세스에 파이프). 이렇게하면 cal이 명령으로 처리되지 않습니다.

'nix'에서 사용되는 다른 종류의 따옴표는 " 큰 따옴표와 ' 작은 따옴표입니다. `backtick '도있다. 각각은 매우 특별한 용도로 사용됩니다.

백틱으로 둘러싸인 명령은 확장 된 인라인입니다. 즉, 실행되고 출력이 줄에 입력됩니다. 사용자 이름 (whoami 명령에 대한 응답)가 john 경우에 따라서,

echo hello `whoami` 

hello john가 발생합니다.

작은 따옴표는 반대의 효과가 있습니다. 즉, 쉘에서 텍스트를 "보호"하므로 더 이상 처리하지 않습니다. 따라서

echo hello '`whoami`' 

은 큰 따옴표 " 조금 덜 제한적인

hello '`whoami`' 

가 발생합니다. $ (변수), \ (이스케이프) 및 '백틱'은 여전히 ​​해석되지만, 스크립트에 공백이있는 인수를 전달하는 좋은 방법입니다. forme : 따라서

doSomething for me 

두 함수 doSomething 매개 변수를 전달한다. 반면

doSomething "for me" 

단 하나의 매개 변수를 전달, for me

에 나는이 당신을 위해 일을 명확히 바랍니다.

관련 문제