この行で始まるプログラムがあります。どういう意味ですか?ドル記号のせいで 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" ]
$