我是bash脚本编写和通过一些示例学习的新手。我看到的示例之一是使用if语句来测试先前分配的输出文件是否有效,如下所示:
if [ -n "$outputFile" ] && ! 2>/dev/null : >> $outputFile ; then
exit 1
fi
我了解
[ -n "$outputFile" ]
的作用,但不了解其余的条件。有人可以解释! 2>/dev/null : >> $outputFile
是什么意思吗?我已经用谷歌搜索了答案,但是找到的大多数链接都是有关I/O重定向的说明,这些说明虽然确实相关,但仍不清楚
! : >>
结构。 最佳答案
那是一些奇怪的代码!:
命令内置在bash中。相当于true
;它什么也不做,成功。
: >> $outputFile
尝试不执行任何操作,并将(空)输出附加到
$outputFile
-已确认为非空字符串。如果文件不存在,则>>
重定向操作符将创建该文件。I/O重定向(例如
2>/dev/null
)可以出现在简单命令中的任何位置。他们不必在最后。因此,:
命令的标准输出(为空)将附加到$outputFile
,任何stderr输出都将重定向到/dev/null。任何这样的stderr输出都将是重定向失败的结果,因为:
命令本身不会执行任何操作,也不会失败。我不知道为什么stdout的重定向(到$outputFile
的末尾)和stderr的重定向(到/dev/null
)在:
命令的相对侧。!
运算符是逻辑“not”;它检查以下命令是否成功,并反转结果。用英语-英语文字书写的最终结果是:
如果设置了“$ outputFile”并且它不是一个空字符串,则如果我们没有写权限,则使用和,然后以状态1终止脚本。
简而言之,它测试我们是否能够写入
$outputFile
,如果不能,则进行测试。