1 美元意味着......?没有任何输入?

1 美元意味着......?没有任何输入?

我有一个以这一行开头的程序。这是什么意思?由于美元符号,我在谷歌搜索时遇到麻烦。

为什么 $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" ]
$ 

相关内容