查看包含方括号的压缩文件的内容

seeing the contents of a zipped file which contains square brackets

x=`unzip -l "$i" | grep /config.xml | tail -1 | sed -e "s/.*:[0-9][0-9] *//"`
content=`unzip -c "$i" "$x" | DO MORE STUFF HERE

每当 x 输出带方括号的字符串时,我在使用上述命令时遇到问题。例如,假设在 运行 宁 x 行之后,$x = "Refresher [Autosaved]/xml/config.xml"。如果我将 $x 传递给内容行,我会得到一个 caution: filename not matched: Refresher [Autosaved]/xml/config.xml 的错误。我已经尝试更新 sed 命令以使用 s/\[\([^]]*\)\]/\\[\\]/g 转义括号并且值很好地回显,但是当我将它保存到 x 时,\[\] 变成 [] 我回到原点。

如果我的 x 值有方括号,我如何 运行 内容命令?

使用现代 $(...) 而不是传统 `...` 可以省去很多麻烦。前者不需要额外转义:

$ x=$(echo 'Foo [Bar].baz' | sed "s/\[\([^]]*\)\]/\\[\\]/g")
$ printf '%s\n' "$x"
Foo \[Bar\].baz


$ x=`echo 'Foo [Bar].baz' | sed "s/\[\([^]]*\)\]/\\[\\]/g"`
$ printf '%s\n' "$x"
Foo [Bar].baz