[英]What's wrong with this shell script 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腳本中沒有修改,所以為什么它會誤解為什么呢?
在unix系統中:
$SOMETHING /* variable */
$(SOMETHINGELSE) /* command */
${FOO} */ variable substitution */
$(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)"
$(...)
在子shell中執行其內容,它不會獲取變量的值。 您可以使用普通的$APACHE_HOME
或${APACHE_HOME}
,聽起來就像您切換到的那樣。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.