我有这个声明if [ ! - f "$i" -o "$i"x = "$MTR"x]
,并且想知道这个声明能实现什么目的。我知道第一部分检查变量是否i
不是文件,但无法弄清楚后面的第二部分是什么-o
(我认为它代表逻辑或)。任何帮助都会非常有帮助。
答案1
正确,-o 代表逻辑或。
比较"$i"x = "$MTR"x
与变量$i
和的内容$MTR
。
我认为将其x
添加到两个变量中是为了避免两个变量中的任何一个未设置或未初始化时出现问题。
答案2
假设该语句是
if [ ! -f "$i" -o "$i"x = "$MTR"x ]
检查-f "$i"
该值是否$i
对应于常规文件(或常规文件的符号链接)。然后用 否定该测试!
。这-o
是一种过时且过时的“逻辑或”表达方式。
这些"$i"x = "$MTR"x
测试以一种有点尴尬的方式进行,这在 shell 的真正旧实现中可能是必要的sh
,测试$i
和是否$MTR
是相同的字符串。
在(当前)标准sh
shell 中,该语句将写成
if [ ! -f "$i" ] || [ "$i" = "$MTR" ]
或者,应用一点逻辑,
if [ "$i" = "$MTR" ] && [ -f "$i" ] || [ ! -f "$i" ]
换句话说:如果$i
与相同的字符串$MTR
并且它们引用现有的常规文件(或指向该文件的符号链接),或者不是$i
文件名,则该语句为真。
看看这个声明的含义可能会更有趣错误的。只有当$i
和$MTR
不是同一个字符串时才为假和 $i
引用现有文件。