bash - 查看包含方括号的压缩文件的内容
问题描述
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 命令?
解决方案
$(...)
使用 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
推荐阅读
- azure - 部署后将 Nginx 入口控制器静态 IP 更改为保留的静态 ip
- mongodb - MongoDB - 计算删除条件
- python - 如何使用 boto3 从 AWS S3 存储桶下载最新的 n 个项目?
- registration - Wordpress 自定义注册表单不添加 first_name 和 last_name
- sql - 物化视图和视图的比较
- python - 每列中有多个分号分隔变量的 DataFrame。如何一键编码?
- windows - Windows 上的错误:使用 pkg-config 找不到作品
- tensorflow - Keras flow_from_directory 没有读取所有类中的所有图像
- python - 如何根据列值获取组的前 n 条记录
- javascript - 如何判断 IndexedDB 何时手动关闭?