$ {HTTPD -...} Perl语法

时间:2010-01-18 06:45:21

标签: bash shell

好的,我无法通过阅读Perl的文档来解决这个问题。我在看Apache的RHEL4 init脚本......这行代码做了什么?

httpd=${HTTPD-/usr/sbin/httpd}

为什么不只是httpd=/usr/sbin/httpd?所有额外的语法都有什么用?

-Geoffrey Lee

2 个答案:

答案 0 :(得分:6)

那不是Perl,它的外壳。 Init脚本通常用shell编写。具体来说,它意味着“如果已定义,则使用HTTPD环境变量,否则使用/ usr / sbin / httpd”。

查看here了解更多信息。

答案 1 :(得分:2)

冒号会影响变量是否被设置为未设置或为空,而不仅仅是检查它是否未设置。

$ var="goodbye"; echo ${var-hello}
goodbye
$ var="goodbye"; echo ${var:-hello}
goodbye
$ var= ; echo ${var:-hello}
hello
$ var= ; echo ${var-hello}    # var is null, only test for unset so no sub. made

$ unset var; echo ${var:-hello}
hello
$ unset var; echo ${var-hello}
hello

来自Bash手册页:

       When not performing substring expansion,  using  the  forms  documented
       below,  bash tests for a parameter that is unset or null.  Omitting the
       colon results in a test only for a parameter that is unset.

       ${parameter:-word}
              Use Default Values.  If parameter is unset or null,  the  expan‐
              sion  of word is substituted.  Otherwise, the value of parameter
              is substituted.