我对 shell 比较陌生(现在是它的基础知识)。我正在理解一个脚本以修复一个错误,但我偶然发现了一些我无法通过谷歌找到答案的东西(可能没有在谷歌上搜索正确的东西)。
if [ -r "$1" ] ;
Run Code Online (Sandbox Code Playgroud)
我对控制流非常熟悉,我也知道 $1 是传递给脚本的参数。我不知道我们正在评估的实际表达式:-r
任何帮助将不胜感激!
它[使用-r运算符运行命令,并将第一个位置参数的内容(如果没有设置位置参数,则为空字符串)作为运算-r符的操作数(以及]对称的关闭)。
该[命令内置于所有类似 Bourne 的 shell(和fish)中。所以它的文档一般可以在相应的shell手册中找到。它也被称为test。
根据您的外壳,请尝试:
info zsh testinfo bash '['fish -c 'help test'man ksh/ man dash... 对于那些没有信息页面的 shell。(当心在某些系统上,需要为这些 shell 可用的格式的文档安装一个bash-doc或zsh-doc包info)。
系统通常也有一个独立的[或test具有类似界面的命令,可以从其他类型的 shell 或非 shell 的东西中使用,不使用 shell 来运行命令(例如env,find -exec...)。可以在info test或man test(也可能man '[')找到那个人的文档。
具体来说,-r操作员就是测试运行shell的进程是否有权限打开给定的文件进行读取。如果为 true,则[命令返回成功退出状态,在这种情况下,if语句将执行该then部分。
这相当于access(argv[1], R_OK)在 C 中。