Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 这个shell脚本语法有什么问题?_Linux_Apache_Shell_Syntax - Fatal编程技术网

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

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脚本中修改,

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

$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编写的!