客观的:
a.zip
使用unzip
on命令展开存档后Ubuntu 12.10
,将a.zip
展开到的文件夹的名称分配给bash
变量v
。
a.zip
假定并保证扩展到单个文件夹,而不是多个文件夹。
例子:
如果unzip a.zip
扩展到文件夹./foo/
,echo $v
应该返回foo
。
我的环境:
GNU/Linux (kernel 3.5.0-25-generic)
Ubuntu 12.10
bash v4.2.37(1)-release
UnZip 6.00 of 20 April 2009, by Debian. Original by Info-ZIP.
Run Code Online (Sandbox Code Playgroud)
我对当前的解决方法不满意:扩展通过unzip -d bar a.zip
然后v=$(ls -1 bar)
给出正确的结果,但弄乱了文件系统。
小智 5
干得好:
v=$(unzip a.zip | grep -m1 'creating:' | cut -d' ' -f5-)
Run Code Online (Sandbox Code Playgroud)
解释
$(...)
是一个捕获壳。它捕获其中的命令的输出并像变量一样替换它们。unzip
命令的输出grep
通过管道传送到,它传递参数-m1
以使其仅返回第一个结果和 text creating:
,它是unzip
创建目录时打印到标准输出的文本的一部分。grep
打印creating: foo/
到标准输出,这是管道cut
。cut
用于打印第二列之后的所有列(以空格分隔)。我们指定从 5 到行尾,因为这个词creating:
前面有几个空格。我们希望使用所有列直到行尾,以防目录名称中有空格。最终输出为foo/
.