Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
187 views
in Technique[技术] by (71.8m points)

Why JSON strings transform with bash shell

I have this:

$ export foo=["foo","zoom"]
$ echo $foo
[foo,zoom]
$ export foo='["foo","zoom"]'
$ echo $foo
["foo","zoom"]

why is it that the " (double quote) chars get removed if I don't wrap in single quotes?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

Consider this:

$ echo "foo"
foo

We notice that there aren't any quotes in that string. From the bash manual:

Enclosing characters in double quotes (‘"’) preserves the literal value of all characters within the quotes, with the exception of ‘$’, ‘`’, ‘’,

So double quotes are bash syntax. To get literal double quotes we need to escape them:

$ echo "foo"
"foo"

Another option to escaping is to use single quotes (again from the bash manual):

Enclosing characters in single quotes (‘'’) preserves the literal value of each character within the quotes.

So this is equivalent to the above command:

$ echo '"foo"'
"foo"

Applied to your specific example, we can see this:

$ export foo=["foo","zoom"]
$ declare -p foo
declare -- foo="[foo,zoom]"

The double quotes are parsed away.

But with

$ export foo='["foo","zoom"]'
$ declare -p foo
declare -x foo="["foo","zoom"]"

The single quotes have the same effect as escaping the double quotes.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...