首页 > 解决方案 > 使用 [] 的争论太多

问题描述

我正在尝试编写一个脚本来根据 wi-fi 强加一个静态 ip。当我尝试执行以下表达式时出现问题,输出告诉我我有太多参数。

[ $(cat /etc/dhcpcd.conf | grep 'interface wlan0') = 'interface wlan0' ]

而检查这个表达式它会给出所需的输出。

[ $(iwlist wlan0 scanning | grep  'ESSID:"Wi-Fi 61"') = 'ESSID:"Wi-Fi 61"' ]

谁能告诉我为什么第一个表达式不起作用而第二个表达式起作用,因为据我了解它们具有相似的结构。

标签: linuxbash

解决方案


Mihir 的回答解释了发生了什么。我发现另一种更简洁的解决方案是使用 grep 命令的返回码作为 if 条件。如果返回为 0,则评估太真实。如果该值是其他任何值,则为 false

因此,您不会从 grep 使用该-q选项获得输出。

if grep -q 'interface wlan0' /etc/dhcpcd.conf
then 
    # Do something
fi
if iwlist wlan0 scanning | grep -q 'ESSID:"Wi-Fi 61"'
then
    # Do something
fi

推荐阅读