Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Bash中[-r$1]和[!-r$1]是什么意思?_Bash - Fatal编程技术网

在Bash中[-r$1]和[!-r$1]是什么意思?

在Bash中[-r$1]和[!-r$1]是什么意思?,bash,Bash,我了解到-r表示递归,这意味着该命令可以在所有子目录中执行。为了确保理解,我编写了下面的两个函数来进行一些测试。我编写以下代码的文件名为test.sh。在同一个目录中,我有一个子目录,名为subtest。在子目录的当前目录中有一个名为xx.sh的文件 #!/bin/bash function aa { if [ ! -r $1 ] then echo "not exist" else echo "exist" fi } function bb { if [

我了解到-r表示递归,这意味着该命令可以在所有子目录中执行。为了确保理解,我编写了下面的两个函数来进行一些测试。我编写以下代码的文件名为test.sh。在同一个目录中,我有一个子目录,名为subtest。在子目录的当前目录中有一个名为xx.sh的文件

#!/bin/bash
function aa {
  if [ ! -r $1 ]
  then
    echo "not exist"
  else
    echo "exist"
  fi
}

function bb {
  if [ -r $1 ]
  then
    echo "exist"
  else
    echo "not exist"
  fi
}

aa xx.sh / bb xx.sh
我发现的结果是:

对于aa函数,使用
-r
,如果xx.sh在当前目录中,它将只打印“exist”。它不会在子目录中查找xx.sh。如果没有
-r
,当xx.sh位于当前目录或子目录中时,它将打印“exist”

对于bb功能,使用
-r
,它将仅在当前目录包含xx.sh时打印“exist”。如果没有
-r
,它将始终打印“exist”,即使根本没有xx.sh(这让我很惊讶,也没有意义!)


有人能解释为什么会出现上述结果,以及-r到底做了什么吗?

我的条件文档(这就是您要查找的,因为它在
[
]
中)如下所示:


我的条件文档(这是您正在寻找的,因为它位于
[
]
中)如下所示:


如果文件存在并且您对该文件具有读取权限,则可能应该将其作为
-r
测试的副本关闭。人工测试-r文件存在并且授予读取权限。
-r
的含义取决于作为参数给出的程序/命令。在本例中,它用于
[
,表示检查由下一个参数命名的文件是否可读。请参阅
man[
man test
,以及
help test
。Shell语法和语义与上下文密切相关。
-r
可以表示“递归”(作为某些文件操作命令的一个选项,尽管其他命令使用了
-R
),“是否有读取权限?”(对
[
测试
命令),“只读”(对
装载
命令),“从这里读取”(对
磁盘
),“重新启动”(对
关闭
),“恢复”(
屏幕
),…在命令选项以外的地方,它也可能具有语法含义,在命令选项中,它的含义仍然不同。如果文件存在,并且您对该文件具有读取权限,则可能应将其作为
-r
测试的副本关闭。.man test…-r file file file exists and read permission is granded的含义
-r
取决于作为参数给出的程序/命令。在本例中,它用于
[
,用于检查下一个参数命名的文件是否可读。请参阅
man[
人工测试
,以及
帮助测试
。Shell语法和语义与上下文密切相关。
-r
可以表示“递归”(作为某些文件操作命令的选项,尽管其他命令使用
-r
),“是否有读取权限?”(对于
[/code>和
测试
命令),“只读”(对
挂载
命令)、“从这里读取”(对
磁盘
)、“重新启动”(对
关机
)、“恢复”(
屏幕
),…在命令选项以外的地方,它也可以有语法含义,在这里它的含义仍然不同。
 -r file
              True if file exists and is readable.