我有點卡住了這個。我delaring一個變量在我的腳本的頂部,然後我創建一個文件作爲我的腳本的一部分:轉義bash變量
app="testing"
cat <<EOF >/etc/init.d/test
#!/bin/bash
args="--emperor $APPCONF/test/$APP.ini"
EOF
它似乎沒有工作,雖然,它似乎在$應用程序變量。我必須對這個變量做些什麼來讓它顯示它的值,在我創建的文件裏面「測試」嗎?
我有點卡住了這個。我delaring一個變量在我的腳本的頂部,然後我創建一個文件作爲我的腳本的一部分:轉義bash變量
app="testing"
cat <<EOF >/etc/init.d/test
#!/bin/bash
args="--emperor $APPCONF/test/$APP.ini"
EOF
它似乎沒有工作,雖然,它似乎在$應用程序變量。我必須對這個變量做些什麼來讓它顯示它的值,在我創建的文件裏面「測試」嗎?
除了使用一致的大小寫($app
不同於$APP
)之外,您可能希望將變量名稱括在括號內 - 否則,如果在變量值之間使用空格,則可能會出現問題,這是一種很好的做法。例如:
args="--emperor ${APPCONF}/test/${APP}.ini"
這樣,$APPCONF
沒有得到混淆${APP}CONF
也。我希望這有幫助!
在某些情況下,這並沒有幫助 - 如果APPCONF具有包含空格的目錄名稱? – 2014-09-25 13:54:32
我不是100%確定,但不應該被雙引號覆蓋? [* 3.1。雙引號參數(變量)引用和命令替換*](http://www.dwheeler.com/essays/filenames-in-shell.html)...說實話,從來沒有真正想過這麼多,所以感謝把它帶來:) – 2014-09-25 14:07:56
雙引號處理分配結束,但不是你實際上試圖在某處使用該參數列表的一側。當你使用它時,你需要強制它在'--emperor'和文件名之間的空格上進行字符串分割;這樣做並不會在「APPCONF」擴展中分裂任何空間,這是事情變得棘手的地方。 – 2014-09-25 14:59:32
我不確定要理解你的問題。我想,你想用一個文件
/etc/init.d/test
包含文本結束:
#!/bin/bash
args="--emperor $APPCONF/test/testing.ini"
如果這樣你的腳本應該是:
app="testing"
cat <<EOF >/etc/init.d/test
#!/bin/bash
args="--emperor \$APPCONF/test/$app.ini"
EOF
比方說,你在做這個正確的方法。你要存儲在數組中的數據:
args=(--emperor "${appconf}/test/${app}.ini")
,然後將其轉換爲字符串嵌入:
printf -v args_str '%q ' "${args[@]}"`
...和使用您的定界符內部的字符串:
#!/bin/bash
args=($args_str)
EOF
...這之外,正在創建的腳本里的任何東西將要擴大它作爲一個數組:
run_something "${args[@]}"
請參閱BashFAQ #50的基本原理和細節。
這與_escaping_變量有什麼關係?轉義用於防止評估某件事物,而不是強制評估它。 – Barmar 2014-09-25 13:48:25
這是一個新手問題,我還在學習 – Jimmy 2014-09-25 13:49:29
順便說一句,BashFAQ#50與你在這裏寫的代碼非常相關:http://mywiki.wooledge.org/BashFAQ/050 – 2014-09-25 13:52:09