1

我正在尝试运行 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 脚本中修改,那么它为什么会误解呢?

4

3 回答 3

2

在 unix 系统中:

$SOMETHING /* variable */
$(SOMETHINGELSE) /* command */
${FOO} */ variable substitution */
于 2012-05-24T15:42:56.513 回答
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)"
于 2012-05-24T15:42:32.853 回答
1

$(...)在子shell中执行其内容,它没有获得变量的值。您可以只使用普通的$APACHE_HOMEor ${APACHE_HOME},这听起来像是您切换到的。

于 2012-05-24T15:43:56.120 回答