在Linux Shell中,[[ -s的含义是什么?

4
我找到了这个命令。我知道这个命令会重新加载bash配置文件并更正Ruby在Ubuntu上需要的权限问题。但是,在“&&”之前的部分是什么意思?
[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm" 
3个回答

6
让我们来详细了解一下: [[]] 允许使用更高级的功能,类似于传统编程语言,例如使用 || 代替 -o&& 代替 -a
如需了解更多信息,请参阅如何使用双括号、单括号、圆括号和花括号,但据我所知,-s 不需要额外的功能,双方括号可以用单方括号代替)。 -s 用于测试文件是否存在且非空。 && 会自动执行右侧的命令,只要左侧的命令没有出现错误返回代码。
因此,该语句测试文件是否存在且非空,如果是,则将其源入当前的 shell 环境。

3

[[ ... ]] 部分允许使用运算符测试条件。可以将其视为 if 语句。在您的示例中,您使用了 -s 运算符,它测试所引用的文件是否为空。

因此,实质上,您发布的命令在 rvm 文件不为空的情况下获取源代码。


2
虽然应该使用单方括号而不是双方括号,没有理由使用Bash特有的形式,标准形式更短。 - Nemo
非常好的答案,伙计们。我甚至在我的两本红帽RHCSA书中都找不到这个符号。 - user1003932

1

[[ 是 Bash 内置的测试函数。 -s 如果以下文件的大小大于零,则返回 true。请参见 Bash 手册(条件构造)。向下滚动一点,找到 [[...]]


非常感谢。我在任何地方都找不到这个答案。 - user1003932

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接