我有下面的bash脚本:

#!/bin/bash
#
[ $# -eq 1 -a $1 = "--help" -o $# -eq 0 ] && {
  echo Help will come here
}

当我运行它时:
$ ./script
./script: line 3: [: too many arguments
$ ./script --help
Help will come here

如您所见,当我不传递参数($-eq 0)时,它会失败,并显示“参数太多”。
所以,我在终端直接测试了它:
$ a=1;b=2;c=3
$ [ $a -eq 1 -a $b -eq 2 -o $c -eq 3 ] && echo ok
ok
$ [ $a -eq 0 -a $b -eq 2 -o $c -eq 3 ] && echo ok
ok
$ [ $a -eq 0 -a $b -eq 0 -o $c -eq 3 ] && echo ok
ok
$ [ $a -eq 0 -a $b -eq 0 -o $c -eq 0 ] && echo ok
$ [ $a -eq 0 -a $b -eq 2 -o $c -eq 0 ] && echo ok
$ [ $a -eq 1 -a $b -eq 2 -o $c -eq 0 ] && echo ok
ok

所以,如果它在终端中工作得很好,为什么它不能传递参数呢?
谢谢,

最佳答案

整个表达式可以简化为:

function help () {
    printf "%s\n" "help is on it's way."
}

[[ $# -eq 0 || "$*" = "--help" ]] && help ; echo "done." && exit 0 ;

这将检查参数的总和是否为零,或者参数是否等于“-help”。如果这两个事件中的任何一个都是真的,那么它将继续到help函数,否则回音“完成”并退出。

07-24 09:47
查看更多