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.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…