4

JSONを引数として受け入れるユーティリティがあります。ユーティリティに渡すためにjsonを正しくエスケープする方法は? 例:

ip="127.0.0.1"
action='{\"server_ip\":\"$ip\",\"action\":\"stop\"}'
./fix-utility -e $action

しかし、JSON は正しくエスケープされていません。

4

3 に答える 3

2

二重引用符と一重引用符は、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)"

"二重引用符のような特殊文字が一部の文字列の一部である必要がある場合、これは改善される可能性があります。

于 2012-12-26T08:45:11.017 に答える