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

如何在单行代码中将变量赋值时的错误重定向至/dev/null

问题描述

我无法在以下代码中将预期错误重定向至/dev/null:

xml=`ls ./XML_30fps/*.xml ./XML_24fps/*xml`

预期错误是当其中一个文件夹为空时,会出现“No such file or directory”提示,我不希望用户看到该错误。我可以通过拆分代码解决,但想知道是否有单行代码的简便重定向方法。以下两种写法均无效:

xml=`ls ./XML_30fps/*.xml ./XML_24fps/*xml` &>/dev/null
xml=`ls ./XML_30fps/*.xml ./XML_24fps/*xml &>dev/null`
解决方案

正确的单行写法

你需要把错误重定向放在反引号内部的ls命令末尾,并且补全/dev/null的路径:

xml=`ls ./XML_30fps/*.xml ./XML_24fps/*.xml 2>/dev/null`

或者用更现代的$()语法(推荐,可读性更好,支持嵌套):

xml=$(ls ./XML_30fps/*.xml ./XML_24fps/*.xml 2>/dev/null)

为什么之前的写法无效

  • 第一种写法xml=ls ... &>/dev/null:错误重定向作用于整个赋值语句,而非反引号内部的ls命令,所以ls产生的错误依然会输出到控制台。
  • 第二种写法漏了/dev/null的斜杠,会把错误输出到当前目录下的dev/null文件而非系统空设备;即使补全斜杠,&>在部分旧版bash中的兼容性也不如直接指定标准错误流的2>/dev/null。

额外安全提示

用ls捕获文件名存在潜在问题(比如文件名含空格、换行符等特殊字符时会出错),更安全的写法是用bash通配符直接赋值:

shopt -s nullglob
xml=(./XML_30fps/*.xml ./XML_24fps/*.xml)

nullglob选项会让空通配符返回空列表,而非保留原字符串,从根源避免“No such file or directory”错误,同时数组能正确处理带特殊字符的文件名。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 22:15:53