You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在macOS的zsh中使用变量创建zip压缩文件

解决zsh中变量传递多文件给zip命令的报错问题

问题根源

你将多个文件路径存入单个字符串变量files,在zsh中直接展开$files时,它会把整个字符串当作单个参数传递给zip命令——也就是说zip会尝试寻找一个名为/var/log/install.log /var/log/jamf.log(包含空格的完整文件名)的文件,自然找不到。而bash默认会对未加引号的字符串变量做分词拆分,将其拆分为两个独立参数,因此能正常执行。

解决方案

方法一:使用数组存储文件路径(推荐)

zsh原生支持数组,用数组存储多个文件路径是更规范、更安全的方式(尤其适合文件路径含空格的场景):

#!/bin/zsh
# 用数组存储多个文件路径
files=(/var/log/install.log /var/log/jamf.log)
# 展开数组,每个元素作为单独参数传递
zip /private/tmp/archivtest.zip "${files[@]}"

注:这里-r参数其实可以省略,因为你压缩的是单个文件而非目录,zip会自动处理;如果后续要压缩目录,再加上-r即可。

方法二:强制zsh对字符串变量分词拆分(不推荐)

如果一定要用字符串变量存储路径,可以通过${=files}语法强制zsh对变量内容做分词拆分,将其拆分为多个独立参数:

#!/bin/zsh
files="/var/log/install.log /var/log/jamf.log"
zip /private/tmp/archivtest.zip ${=files}

⚠️ 注意:如果文件路径包含空格、特殊字符,这种方法会出错,因此仅适用于路径无特殊字符的简单场景,优先推荐数组方案。

内容的提问来源于stack exchange,提问作者Thrawnium

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 21:28:13