-r 文件名 && 。文档名称

0 shell shell-script

我只是在研究一个脚本,我找到了这一行。谁能告诉我这条线是做什么的。这是代码行。

[ -r "$PosConfigDir/posconfig.sh" ] && . "$PosConfigDir/posconfig.sh"
Run Code Online (Sandbox Code Playgroud)

cuo*_*glm 5

它会检查您是否有权r读取文件$PosConfigDir/posconfig.sh,在符号链接解析后,然后获取该文件。

它不保证您可以读取该文件。例如,在大多数系统上,[ -r / ]将返回 true 但您无法读取 /.

-r是一个标准的测试操作符

.是 Bourne-like shell 的特殊内置命令,它告诉 shell 读取和解释作为参数给出的文件中的代码。sourcecsh. 许多现代的类似 Bourne 的 shell 被理解source..

对于某些 shell 实现,.打开或读取文件失败将导致 shell 中止(在输出错误消息后)。-r在这种情况下,检查可能是为了防止这种情况发生。

为了防止 shell 中止,在 POSIX shell 中,可以有一个替代方法

 command . "$PosConfigDir/posconfig.sh"
Run Code Online (Sandbox Code Playgroud)

(尽管上述构造将无法工作,zsh除非在shksh仿真中)

为避免出现错误消息,您需要将 stderr 输出重定向到/dev/null,但这会产生不必要的副作用,即也会使postconfig.sh.

一个例子:

$ [ -r /etc/os-release ] && . /etc/os-release
$ printf '%s\n' "$PRETTY_NAME"
Debian GNU/Linux 8 (jessie)
Run Code Online (Sandbox Code Playgroud)

PRETTY_NAME/etc/os-release文件中定义:

$ head -n 1 /etc/os-release 
PRETTY_NAME="Debian GNU/Linux 8 (jessie)"
Run Code Online (Sandbox Code Playgroud)