簡體   English   中英

這個shell腳本語法有什么問題?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM