if [ -r "$1" ] 会怎样;意思?

joe*_*ter 1 shell

我对 shell 比较陌生(现在是它的基础知识)。我正在理解一个脚本以修复一个错误,但我偶然发现了一些我无法通过谷歌找到答案的东西(可能没有在谷歌上搜索正确的东西)。

if [ -r "$1" ] ; 
Run Code Online (Sandbox Code Playgroud)

我对控制流非常熟悉,我也知道 $1 是传递给脚本的参数。我不知道我们正在评估的实际表达式:-r

任何帮助将不胜感激!

Sté*_*las 5

[使用-r运算符运行命令,并将第一个位置参数的内容(如果没有设置位置参数,则为空字符串)作为运算-r符的操作数(以及]对称的关闭)。

[命令内置于所有类似 Bourne 的 shell(和fish)中。所以它的文档一般可以在相应的shell手册中找到。它也被称为test

根据您的外壳,请尝试:

  • info zsh test
  • info bash '['
  • fish -c 'help test'
  • man ksh/ man dash... 对于那些没有信息页面的 shell。

(当心在某些系统上,需要为这些 shell 可用的格式的文档安装一个bash-doczsh-docinfo)。

系统通常也有一个独立的[test具有类似界面的命令,可以从其他类型的 shell 或非 shell 的东西中使用,不使用 shell 来运行命令(例如envfind -exec...)。可以在info testman test(也可能man '[')找到那个人的文档。

具体来说,-r操作员就是测试运行shell的进程是否有权限打开给定的文件进行读取。如果为 true,则[命令返回成功退出状态,在这种情况下,if语句将执行该then部分。

这相当于access(argv[1], R_OK)在 C 中。