1달러는...? 입력이 없나요?

1달러는...? 입력이 없나요?

이 줄로 시작하는 프로그램이 있습니다. 무슨 뜻이에요? 달러 기호 때문에 Google에서 검색하는 데 문제가 있습니다.

$1에는 왜 매개변수가 없나요? 여기서 -d는 무엇을 의미하나요?

  if [ -d $1 ]; then

if 조건이 시작되지 않은 경우에도 세미콜론이 표시됩니까? 내 생각에 세미콜론은 명령문의 끝이나 조건의 끝에서만 나타나는 것 같습니다.

   if () {  };

답변1

세미콜론이 필요한 이유는 컨텍스트가 끝나는 위치(세미콜론, 개행 등을 통해)를 표시하지 않으면 if조건이 끝나고 조건부 블록이 시작되는 위치를 알 수 있는 방법이 없기 때문입니다. 비교하다:

$ if echo then foo then; then :; fi
then foo then
$ if echo then; then :; fi
then

-d다음 매개변수가 디렉터리인지 확인하는 테스트입니다. 에서 help test( test와 동일하기 때문에 [):

-d FILE        True if file is a directory.

예를 들어:

$ mkdir foo
$ if [ -d foo ]; then
>     echo foo is a dir
> fi
foo is a dir

$1프로그램에 전달되는 첫 번째 매개변수입니다. 예를 들어:

$ cat > script << 'EOF'
> #!/bin/sh  
> echo "$1"
> EOF
$ chmod +x script
$ ./script foo
foo

그런데 여기에 인용해야 합니다. $1그렇지 않으면 여러 매개변수로 확장되어 구문 오류가 발생할 수 있기 때문입니다 [.

$ dir="foo bar"
$ [ -d $dir ]
sh: 2: [: foo: unexpected operator
$ [ -d "$dir" ]
$ 

관련 정보