이 줄로 시작하는 프로그램이 있습니다. 무슨 뜻이에요? 달러 기호 때문에 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" ]
$