我正在尝试运行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脚本中修改,所以为什么它会误解为什么?
答案 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}
,这听起来就像您切换到的那样。