2012-09-20 129 views
0

KSH - HP-SOL-Lin 需要POSIX结合Unix测试命令&& + ||

我想测试多个条件是否为真,然后做一些事情。

假设:

  • FIELDS=0
  • $STRING=''$STRING=' '

现在我有:

if [[ $FIELDS -ne 0 && ! -z $STRING ]]; do 

这工作得很好,如果$STRING为空,但它也有一个空间。我怎样才能先处理两个$STRING测试?从概念上讲,我想的等价的:记住

[[ $FIELDS -ne 0 && [ ! -z $STRING || $STRING = ' ' ] ]] 
+0

使用'[['会导致不确定的结果。如果你想成为POSIX,你必须使用''''或'test'。 –

+0

@WilliamPursell'[['不会导致未指定的结果。非POSIX兼容的结果或不可移植的结果,是的,但'bash'或'ksh'或'zsh'或者其它正在执行的shell都会指定结果。 – twalberg

+1

@twalberg引用标准:'以下单词在某些实现中可能被识别为保留字(当没有引用任何字符时),从而导致未指定的结果: [[]] function select' –

回答

1

你可以单独测试:

if [[ $FIELDS -ne 0 ]]; then 
    if [[ ! -z $STRING || $STRING == ' ' ]]; then 
    do some stuff 
    fi 
fi 
0

轴承是$字符串可以是单个空格,我假设值设置为(空和太空之间)是无关紧要的,在这种情况下,一个简单的方法是首先运行$字符串的简单检查:

if [[ $STRING == ' ' ]] 
then 
    export STRING='' 
fi 

if [[ $FIELDS -ne 0 && ! -z $STRING ]]; do 

提高可读性,意味着你将不必执行相同的附加测试对随后的命令。

如果我的假设不正确,请不要犹豫,把我送到淘气的一步。

1

对于POSIX一致性,

if [ "$FIELDS" -ne 0 -a (! -z "$STRING" -o "$STRING" = " ") ]; then 
... 
fi