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时,\[
和\]
变成{{1 }}和[
,我回到平方。
如果我的x值带有方括号,如何运行内容命令?
答案 0 :(得分:2)
使用现代$(...)
而不是旧版`...`
可以省去很多麻烦。前者不需要额外的转义:
$ 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