首页 > 解决方案 > 查看包含方括号的压缩文件的内容

问题描述

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/\[\([^]]*\)\]/\\\[\1\\\]/g并且值回显很好,但是当我将其保存到 x 时,\[and\]变成了 just [and]我又回到了第一方。

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

标签: bashsedunzipbrackets

解决方案


$(...)使用 Modern而不是 legacy为自己省去很多麻烦`...`。前者不需要额外的转义:

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


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

推荐阅读