Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
menu search
person
Welcome To Ask or Share your Answers For Others

Categories

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

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

1 Answer

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.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
...