bash 如果使用管道命令进行评估

bash eval in if with piped command

bash 中的管道 eval 用于字符串长度比较

我正在尝试检查是否插入了具有给定 ID 的特定设备并根据该设备触发操作

我尝试了 eval / exec

这是我目前所拥有的

#!/bin/bash
KBP='[["lsusb -d 1c11:b04d | wc -c" == "0"]]'
if eval $KBP; then
    echo expression evaluated as true
else
    echo expression evaluated as false
fi

预期结果:

如果设备已插入且字符串不为 0,它将跳入错误条件

实际结果 - 无法评估管道条件

猜测固定表达式如下所示:

if [ "$(lsusb -d 1c11:b04d | wc -c)" -eq 0 ]; then

要记住:

  • Bash 是空格感知的。 [[]]需要after和behind(好吧,;在这里很特殊,它分隔命令)。
  • 要获取命令的输出,请使用命令替换$( ... )
  • 这里不需要eval。