在cygwin环境下运行脚本

在cygwin环境下运行脚本

我正在使用这段代码:

  numbzip=`ls *.plt.zip | wc -l` &>/dev/null

并尝试删除命令窗口中的输出。

不存在以 .plt.zip 结尾的文件,因此它返回:

ls: cannot access *.plt.zip: No such file or directory

无论我尝试什么,它总是在命令窗口中写入这一行。

我试过:

numbzip=`ls *.plt.zip | wc -l` >/dev/null 2>/dev/null
numbzip=`ls *.plt.zip | wc -l` >/dev/null >>/dev/null 2>/dev/null

问候,威尔科。

答案1

您不应该解析 的输出ls。而是使用查找

numbzip=$(find -iname "*.zip" | wc -l)

echo $numzip

答案2

您不断看到该消息是因为您重定向了错误的内容:

numbzip=`ls *.plt.zip | wc -l` &>/dev/null

这会重定向变量赋值的 stderr,而不是命令的 stderr ls。您在ls内部运行``并在外部重定向。要重定向 的错误输出ls,请使用:

numbzip=`ls *.plt.zip 2>/dev/null | wc -l` 

也就是说,虽然上面的方法适用于简单的文件名,但如果您的文件名包含换行符,则会失败。作为一般规则,您应该避免解析输出ls。您可以使用 shell 通配符来代替:

zipfiles=( *.plt.zip )
echo ${#zipfiles[@]}

第一个命令将创建一个zipfiles数组,其内容是与 glob 匹配的所有文件/目录*.plt.zip。第二行打印数组中元素的数量。

相关内容