bash如果声明

时间:2012-12-25 08:55:00

标签: linux bash sh

我找到了这个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}" ]才会这样做。
  3. 我是对的吗?

2 个答案:

答案 0 :(得分:3)

首先,如果您需要严格的POSIX一致性,[只对[[开始有意义。 -f-r测试如果为空,只要它们的选项参数被正确引用,则应始终为false,因此第一个测试无用。 -r对于例如{0}命名管道,套接字等。-f仅限于常规文件。

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

答案 1 :(得分:2)

除非您明确要求将其作为常规文件,否则仅使用-r即可。