Linux 这个shell脚本语法有什么问题?
我正在尝试运行Apache启动脚本/etc/init.d/httpd。像这样的环境变量定义给出了一个错误:Linux 这个shell脚本语法有什么问题?,linux,apache,shell,syntax,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脚本中修改,
CONF_FILE=$(APACHE_HOME)/conf/httpd.conf
它说/etc/init.d/httpd:line 15:APACHE_HOME:command not found
因此,我用花括号替换了括号,脚本运行得很顺利。有什么好处?我真的只是问这个问题,因为我想了解为什么它是错误的,而不是如何修复它。shebang就在那里,它没有从原始的shell脚本中修改,所以为什么它会误解呢?$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)"
$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)"
在unix系统中:
$SOMETHING /* variable */
$(SOMETHINGELSE) /* command */
${FOO} */ variable substitution */
在unix系统中:
$SOMETHING /* variable */
$(SOMETHINGELSE) /* command */
${FOO} */ variable substitution */
$。。。在子shell中执行其内容,但不获取变量的值。您可以只使用普通的$APACHE\u HOME或${APACHE\u HOME},听起来就像您切换到了。$。。。在子shell中执行其内容,但不获取变量的值。您可以只使用普通的$APACHE_HOME或${APACHE_HOME},听起来像是切换到了。为什么用括号?留给他们$foo尝试将foo作为命令运行,并替换该命令的输出。APACHE_HOME不是命令。$是命令插值,${}是变量替换为什么APACHE的httpd文件是错误的?$VAR是Makefile中的变量扩展。可能您正在查看的文件是要由shell以外的其他对象解析的。为什么要用括号?留给他们$foo尝试将foo作为命令运行,并替换该命令的输出。APACHE_HOME不是命令。$是命令插值,${}是变量替换为什么APACHE的httpd文件是错误的?$VAR是Makefile中的变量扩展。也许您正在查看的文件是由shell以外的其他程序来解析的。在这样的赋值中,变量周围不需要引号。在这样的赋值中,变量周围不需要引号。是的,我现在看到了,但是为什么httpd错了?它是由Apache编写的!是的,我现在明白了,但是为什么httpd错了呢?它是由Apache编写的!