bash - 将管道输出传递给测试命令

标签 bash if-statement sed echo test-command

我对 test 命令语法感到困惑。我的目标是检查文件是否存在,但文件路径由 sed 命令形成。

所以,我尝试,例如:

echo '~/test111' | sed s/111/222/g | test -f && echo "found" || echo "not found"

但是该命令总是返回“found”。我做错了什么?

最佳答案

按照当前的方法,您只是说:

test -f && echo "yes" || echo "no"

由于 test -f 默认返回 true,因此您总是得到“yes”:

$ test -f
$ echo $?
0

正确的语法是test -f "string":

所以你想说:

string=$(echo '~/test111'|sed 's/111/222/g')
test -f "$string" && echo "found" || echo "not found"

可以压缩为:

test -f "$(echo '~/test111'|sed 's/111/222/g')" && echo "found" || echo "not found"

但它失去了可读性。

您还可以使用 xargs 以上一个管道给出的名称执行给定的操作:

echo '~/test111'|sed 's/111/222/g' | xargs test -f && echo "found" || echo "not found"

关于bash - 将管道输出传递给测试命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31070041/

相关文章:

recursion - sed:将保持空间与模式空间相匹配

node.js - Windows Linux 子系统命令不执行任何操作并且静默失败

bash - 如何枚举文件列表

bash - 随机创建大小为1M、10M、100M、1G、10G的文件和文件夹

Java - Selenium WebDriver - 当条件似乎已满足时不执行 IF/ELSE 语句

xslt - 检查属性等于值的节点是否存在

php - 如何在函数选择中使用IF和ELSE?

bash - sed:替换主机文件中的 ip,使用主机名作为模式

regex - 如何用sed搜索和替换这个字符串?

python - 检查进程是否仍在运行