0

我找到了这个 bash 脚本(有效)。这个脚本起着重要的作用。脚本的整体代码质量很好。我只是想知道以下构造是否有任何意义?

if [ "${G_FILE}" != "" ] && [ -f "${G_FILE}" ] && [ -r "${G_FILE}" ]; then
....

手册说:

[ -f FILE ] True if FILE exists and is a regular file.
[ -r FILE ] True if FILE exists and is readable.
[ STRING1 != STRING2 ]  True if the strings are not equal.

我的想法:

  1. [ -n "${G_FILE}" ][ "${G_FILE}" ]应该代替[ "${G_FILE}" != "" ].
  2. 只会[ -r "${G_FILE}" ]做同样的事情。

我对吗?

4

2 回答 2

3

首先,只有在您需要严格的 POSIX 一致性[时才有意义。如果它们的选项参数被正确引用,并且测试应该始终为假,因此第一个测试是无用的。例如命名管道、套接字等将是正确的。将事物限制在常规文件中。[[-f-r-r-f

通常,您不需要检查文件是否真正可读。该检查可以与测试捆绑在一起,以测试使用该文件的东西在大多数情况下是否成功。失败的重定向是错误的,最好以失败时返回适当状态的方式编写函数,而不是首先测试可读文件。

于 2012-12-25T09:01:31.287 回答
2

除非您特别要求它是常规文件,否则仅使用-r就足够了。

于 2012-12-25T08:58:14.777 回答