好的,我无法通过阅读Perl的文档来解决这个问题。我在看Apache的RHEL4 init脚本......这行代码做了什么?
httpd=${HTTPD-/usr/sbin/httpd}
为什么不只是httpd=/usr/sbin/httpd
?所有额外的语法都有什么用?
-Geoffrey Lee
答案 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.