首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >合并两个Linux条件是可能的吗?

问合并两个Linux条件是可能的吗?
EN

Stack Overflow用户
提问于 2017-02-16 15:00:14
回答 3查看 117关注 0票数 1

在Linux中,您可以执行简单的命令行条件,例如。

代码语言:javascript
复制
echo 'The short brown fox' | grep -q 'fox' && echo 'Found' || echo 'Not Found'

>> Found

或

代码语言:javascript
复制
test -e test.txt && echo 'File Exists' || echo 'File Not Found'
>> File exists

能不能把这两个条件结合在一起呢?因此,如果找到了fox,我们将查看文件是否存在,然后相应地执行条件。

我试过以下几种方法,但它们似乎不起作用:

代码语言:javascript
复制
echo 'The short brown fox' | grep -q 'fox' && (test -e test.txt && echo 'File Exists' || echo 'File Not Found') || echo 'Fox Not Found'

echo 'The short brown fox' | grep -q 'fox' && `test -e test.txt && echo 'File Exists' || echo 'File Not Found'` || echo 'Fox Not Found'

我需要命令在一条线上进行。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-02-16 15:06:30

可以使用{ ...; }对shell中的多个命令进行分组,如下所示:

代码语言:javascript
复制
echo 'The short brown fox' | grep -q 'fox' &&
{ [[ -e test.txt ]] && echo "file exists" || echo 'File Not Found'; } || echo 'Not Found'

大括号中的所有命令(即{ ...; } )都将在grep成功时执行,而{ ...; }外的||将被计算为grep失败。

编辑:

下面是csh一条班轮在做同样的事情:

代码语言:javascript
复制
echo 'The short brown ox' | grep -q 'fox' && ( [ -e "test.txt" ] && echo "file exists" || echo 'File Not Found' ; ) || echo 'Not Found'
票数 2
EN

Stack Overflow用户

发布于 2017-02-16 15:19:40

不要像这样组合||和&&;使用显式的if语句。

代码语言:javascript
复制
if echo 'The short brown fox' | grep -q 'fox'; then
    if test -e test.txt; then
        echo "File found"
    else
        echo "File not found"
    fi
else
    echo "Not found"
fi

如果a && b || c成功且b失败(虽然可以使用a && { b || c; },但if语句的可读性更强),则b不是等效的。

票数 2
EN

Stack Overflow用户

发布于 2017-02-16 15:05:11

嗯!您可以像这样使用and或操作符:

代码语言:javascript
复制
echo "The short brown fox" | grep fox && echo found || echo not found

如果您也希望抑制grep的输出,以便只看到“找到”或“未找到”,则可以这样做:

代码语言:javascript
复制
echo "The short brown fox" | grep fox >/dev/null && echo found || echo not found

&&运算符和||运算符是短路的,所以如果echo "The short brown fox" | grep fox >/dev/null返回一个真实的退出代码(0),那么echo found就会执行,而且因为它还返回退出代码0,所以echo not found永远不会执行。

类似地,如果echo "The short brown fox" | grep fox >/dev/null返回一个falsey代码(>0),那么echo found将完全不执行,而echo not found将执行。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42277518

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档