这个shell脚本语法有什么问题?

时间:2012-05-24 15:40:41

标签: linux apache shell syntax

我正在尝试运行Apache启动脚本/etc/init.d/httpd。像这样的环境变量定义会出错:

CONF_FILE=$(APACHE_HOME)/conf/httpd.conf  

它说"/etc/init.d/httpd: line 15: APACHE_HOME: command not found"

所以,我用大括号替换括号,脚本游动。是什么赋予了?我真的只是问这个问题,因为我想理解为什么它是错的,而不是如何解决它。 shebang在那里,并且它没有从原始shell脚本中修改,所以为什么它会误解为什么?

3 个答案:

答案 0 :(得分:2)

在unix系统中:

$SOMETHING /* variable */
$(SOMETHINGELSE) /* command */
${FOO} */ variable substitution */

答案 1 :(得分:1)

$(something)告诉shell执行命令something并替换命令的输出。 1

您想要替换变量的输出,因此您只需要在变量前面加$,如下所示:CONF_FILE=$APACHE_HOME/conf/httpd.conf

或者,你可以使用CONF_FILE=${APACHE_HOME}/conf/httpd.conf(注意花括号而不是括号),但对你的情况来说并不是必需的。


1 当您想要将命令的输出分配给变量时,这非常有用。例如:

MY_VAR="$(egrep 'someline' somefile.txt)"

答案 2 :(得分:1)

$(...)在子shell中执行其内容,它不会获取变量的值。您可以使用简单的$APACHE_HOME${APACHE_HOME},这听起来就像您切换到的那样。