查看包含方括号的压缩文件的内容
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
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