2010-04-04 6 views
0

이것은 내 첫 Bash 스크립트이므로이 질문이 사소한 경우 용서해주십시오. 지정된 디렉토리 $ HOME/.junk 내의 파일 수를 계산해야합니다. 나는이 간단 할 것이라고 생각하고 다음 작업 것입니다 가정 :Bash 스크립트 내에서 옵션을 사용하여 리눅스 유틸리티 호출하기

명령 줄에서 find $HOME/.junk -type f | wc -l을 입력하면
numfiles= find $HOME/.junk -type f | wc -l 
echo "There are $numfiles files in the .junk directory." 

가 단순히 파일의 수를 반환이 예상 정확히 어떻게 작동합니다. 스크립트에서 입력 할 때 왜 작동하지 않습니까? 유틸리티에 옵션을 전달할 때 특별한 표기법을 놓치고 있습니까?

시간을내어 도와 주셔서 감사합니다.

+0

참고 경우. 이는 원할 때 유용 할 수 있습니다 (부모 쉘에 영향을 미치지 않고 한 명령의 지속 기간 동안 env var을 설정할 수 있음). 그러나 이것이 발생하는 것을 모르는 경우에는 놀랍습니다. –

답변

5

당신은 역 따옴표로 묶어야합니다 : 이것에 대한

numfiles=`find $HOME/.junk -type f | wc -l` 

기간은 command substitution입니다. 당신이 떠들썩한 파티를 사용하는 경우

+0

대단히 감사합니다! 이제 작동합니다. –

+0

@ 카일 : 천만에. Bash 스크립팅을 배우는 데 더 많은 문제가 발생하는 경우 (또는 "사전에 배우기"만하려는 경우) 고급 Bash Scripting Guide를 통해 필자의 대답에 링크 된 내용을 읽는 것이 좋습니다. –

+0

필자는이 안내서를 잘 사용하도록 고맙게 생각합니다. Mark에게 감사드립니다. –

4

당신은 또한과 같이 명령 교체를 $()를 사용할 수 있습니다

numfiles=$(find $HOME/.junk -type f | wc -l) 

내가이 약간 더 역 인용 부호 이상 읽을뿐만 아니라, 여러 둥지 능력을 가진 것으로 발견 서로 내부 명령. bash는 4

+0

이것은 또한 도움이됩니다, 대단히 감사합니다! –

1

(당신이 재귀하려는 경우)

#!/bin/bash 
shopt -s globstar 
for file in ** 
do 
((i++)) 
done 
echo "total files: $i" 

당신의 '찾기'명령이 환경 변수를 빈 문자열로 'numfiles'세트로 실행 된하지

#!/bin/bash 
shopt -s dotglob 
shopt -s nullglob 
for file in * 
do 
    ((i++)) 
done 
echo "total files: $i" 
+0

흥미로운 정보! –

관련 문제