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?
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?
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.