我有接受JSON作爲參數的實用程序。如何正確地轉義json傳遞給實用程序? 例子:在bash腳本中正確轉義Json命令行選項
ip="127.0.0.1"
action='{\"server_ip\":\"$ip\",\"action\":\"stop\"}'
./fix-utility -e $action
但是JSON是沒有得到正確轉義。
我有接受JSON作爲參數的實用程序。如何正確地轉義json傳遞給實用程序? 例子:在bash腳本中正確轉義Json命令行選項
ip="127.0.0.1"
action='{\"server_ip\":\"$ip\",\"action\":\"stop\"}'
./fix-utility -e $action
但是JSON是沒有得到正確轉義。
如果你想插入例如$ip
裏面的字符串,你需要用雙引號。值中的雙引號需要反斜槓轉義。
ip="127.0.0.1"
action="{\"server_ip\":\"$ip\",\"action\":\"stop\"}"
./fix-utility -e "$action"
其實,我建議不要存放在變量的作用,除非你的例子省略了一些重要的,這使得有必要。
雙引號和單引號不被bash解釋器認爲是相同的:雖然雙引號讓bash展開包含的變量,但單引號不會。儘量簡單:
echo "$BASH_VERSION"
4.1.5(1)-release
echo '$BASH_VERSION'
$BASH_VERSION
在所有的,有一個很好的可重複使用bash的方式:
declare -A jsonVar
toJsonString() {
local string='{'
for var in ${!jsonVar[*]} ;do
string+="\"$var\":\"${jsonVar[$var]}\","
done
echo ${string%,}"}"
}
jsonVar[action]=stop
jsonVar[server_ip]=127.0.1.2
toJsonString
{"action":"stop","server_ip":"127.0.1.2"}
最後:
./fix-utility -e "$(toJsonString)"
這可能如果特價字符像"
雙引號來改善必須是某些字符串的一部分。
你能否詳細說明爲什麼我不應該在變量中存儲動作? –
在這個有限的例子中,至少,這是一個多餘的複雜因素,尤其是如果你不完全確定引用和評估規則。 – tripleee