我有一个以这一行开头的程序。这是什么意思?由于美元符号,我在谷歌搜索时遇到麻烦。
为什么 $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" ]
$