我有一個以這一行開頭的程式。這是什麼意思?由於美元符號,我在谷歌搜尋時遇到麻煩。
為什麼 $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" ]
$