JSONを引数として受け入れるユーティリティがあります。ユーティリティに渡すためにjsonを正しくエスケープする方法は? 例:
ip="127.0.0.1"
action='{\"server_ip\":\"$ip\",\"action\":\"stop\"}'
./fix-utility -e $action
しかし、JSON は正しくエスケープされていません。
JSONを引数として受け入れるユーティリティがあります。ユーティリティに渡すためにjsonを正しくエスケープする方法は? 例:
ip="127.0.0.1"
action='{\"server_ip\":\"$ip\",\"action\":\"stop\"}'
./fix-utility -e $action
しかし、JSON は正しくエスケープされていません。
二重引用符と一重引用符は、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)"
"
二重引用符のような特殊文字が一部の文字列の一部である必要がある場合、これは改善される可能性があります。