Unix-条件中的条件
我到处找了,但找不到答案。 在ksh中,您如何执行以下操作:Unix-条件中的条件,unix,ksh,Unix,Ksh,我到处找了,但找不到答案。 在ksh中,您如何执行以下操作: while [ [ ! [ [ -n $var1 ] || [ [ -n $var2 ] && [ -n $var3 ] ] ] ] && [ ! [ [ -n $var1 ] && [ -n $var2 ] ] ] ]; do ...etc etc done 或者以伪/更容易看到的方式 while ((! ((var1 != none) or ((var2
while [ [ ! [ [ -n $var1 ] || [ [ -n $var2 ] && [ -n $var3 ] ] ] ] && [ ! [ [ -n $var1 ] && [ -n $var2 ] ] ] ]; do
...etc etc
done
或者以伪/更容易看到的方式
while ((! ((var1 != none) or
((var2 != none) and (var3 != none)))
and
(!((var1 != none) and (var2 != none)))) {
....
}
…基本上是任何类型的分组条件
我在简单的条件下发现了很多,比如
如果[-z$var1]&&&[-n$var2];然后
但和上面的不一样
任何帮助都将不胜感激。您希望执行的测试存在许多问题
- 如果
为空,像$var
这样的片段将失败,因为它将扩展为单个-n$var
-n
-n“$var”
是这里的防弹版本
- 和用
运算符表示,而不是-a
和&
- 或用
运算符表示,而不是-o
|
- 分组运算符是
而不是另一个嵌套的()
构造[]
[ ! ( -n "$var1" -o ( -n "$var2" -a -n "$var3" ) ) -a ! ( -n "$var1" -a -n "$var2" ) ]
[ ! '(' -n "$var1" -o '(' -n "$var2" -a -n "$var3" ')' ')' -a ! '(' -n "$var1" -a -n "$var2" ')' ]
请注意,此处必须使用空格
根据转义规则,您可能必须转义(
和)
由于我不知道如何在ksh
中处理这些问题,我无法确定是否真的有必要,但全防壳版本看起来是这样的:
[ ! ( -n "$var1" -o ( -n "$var2" -a -n "$var3" ) ) -a ! ( -n "$var1" -a -n "$var2" ) ]
[ ! '(' -n "$var1" -o '(' -n "$var2" -a -n "$var3" ')' ')' -a ! '(' -n "$var1" -a -n "$var2" ')' ]
请注意,[
是一个可执行文件,通常位于/usr/bin/
中,因此不同shell之间没有任何语法差异
使用不同的shell时,只需注意不同的元字符。使用
ksh
的[[]]
语法要容易得多。(
和)
不需要被引用,您可以像在C语言中一样使用&
和|
。例如:
[[ ! ( -n $var1 && ( -n $var2 || -n $var3 ) ) ]]
此外,您不需要在[[]]
中使用双引号$var
,这将使代码更加清晰