この行で始まるプログラムが 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" ]
$