我试着用sh而不是bash来解决这个问题。
我只需要一个if语句来检查一些regex和其他东西。通常在bash中,这是一项简单的工作,但是在sh中,我只能在网上找到不适合我的解决方案。
我要检查的第一件事是:
if echo "$1"| grep -E -q '^(\-t|\-\-test)$';
我想查一下:
if echo "$#"| grep -E -q '^(1|2)$';
合并:
if [ \(echo "$1"| grep -E -q '^(\-h|\-\-help)$'\) -a \(echo "$#"| grep -E -q '^(1|\2)$'\) ];
错误:
grep: grep: ./analysehtml.sh: 41: [: missing ]
Invalid back reference
(echo: No such file or directory
grep: 1: No such file or directory
我也尝试了许多不同的组合与这个括号,但没有他们为我工作。或许有人可以帮我:)
最佳答案
命令之间的逻辑和&&
if
echo "$1"| grep -E -q '^(\-h|\-\-help)$' &&
echo "$#"| grep -E -q '^(1|\2)$';
默认情况下,管道的退出状态是最后命令的退出状态。
set -o pipefail
出口状态失败,如果管道的任何命令都有失败退出状态。当只检查序列的最后命令的退出状态时
if { command11; command12;} && { command21; command22;};
但是,要检查参数,不需要使用管道启动另一个进程。
考虑对任何posix sh使用以下构造。
if { [ "$1" = -h ] || [ "$1" = --help ];} &&
{ [ $# -eq 1 ] || [ $# -eq 2 ];};
编辑:以下不是posix,但可以与许多shell一起使用
if [[ $1 = -h || $1 = --help ]] && [[ $# = 1 || $# = 2 ]];
也可以与bash一起使用
grep
关于linux - sh中带有“and”的语句该怎么办,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44569075/