【发布时间】:2020-01-21 23:43:42
【问题描述】:
从这个答案https://stackoverflow.com/a/59688271/7577919 我能够使用这个 bash 脚本来解密多个 PDF:
temp=`ls`;
for each in $temp;
do qpdf --decrypt --replace-input $each;
done
但是,我最初尝试在 Zsh 中执行此操作(在 MacOS 10.15 Catalina 中鼓励这样做),但无法做到。它给出了output: File name too long的错误
Bash 和 Zsh 中的 for 循环之间有什么区别,我将如何编写合适的 Zsh 脚本?
【问题讨论】:
-
for i in *; do qpdf --decrypt --replace-input "$i"; done会起作用吗? (注意引号) -
是的,这似乎可行。为什么?为什么它不需要
temp=`ls`? -
@dibery :如果我们很挑剔,您的解决方案并不完全等同。在没有文件的目录的情况下,您的解决方案会给出一条错误消息并 set
each执行单个星号,而ls将扩展为空字符串。 -
@CTHall 我猜文件名中有一些空格。您可以通过在脚本之前发出
set -x来调试它,以查看哪个文件是导致此错误的原因。星号扩展到该目录中的所有文件(如果有任何文件)。 -
@user1934428
zsh默认情况下不会将不匹配的模式视为文字字符串;它引发了一个错误。bash和zsh都可以配置为将不匹配的模式视为空序列(不是文字空字符串),这样就不会进入循环。