我对 shell 比较陌生(现在是它的基础知识)。我正在理解一个脚本以修复一个错误,但我偶然发现了一些我无法通过谷歌找到答案的东西(可能没有在谷歌上搜索正确的东西)。
if [ -r "$1" ] ;
Run Code Online (Sandbox Code Playgroud)
我对控制流非常熟悉,我也知道 $1 是传递给脚本的参数。我不知道我们正在评估的实际表达式:-r
任何帮助将不胜感激!
它[
使用-r
运算符运行命令,并将第一个位置参数的内容(如果没有设置位置参数,则为空字符串)作为运算-r
符的操作数(以及]
对称的关闭)。
该[
命令内置于所有类似 Bourne 的 shell(和fish
)中。所以它的文档一般可以在相应的shell手册中找到。它也被称为test
。
根据您的外壳,请尝试:
info zsh test
info 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 中。