有人可以向我解释为什么这不部分匹配 macaddress 吗$mac
?
#!/bin/sh
mac="f0:79:60:0f:d3:0e"
if [[ "$($mac)" = 'f0:79:60*' ]]
then
echo "true"
else
echo "false"
fi
请注意,我需要"$($mac)"
在 if 语句内部调用,否则它将不会替换变量。
答案1
由于您使用的是 BusyBox (ash shell),问题似乎是您的脚本使用了 shell 无法识别的构造 ( [[...]]
)。另外,"$($mac)"
应改为$mac
.
这是一个可以在 BusyBox 上运行的更正版本(作为 tail Spark 兔子耳朵答案的替代方案):
#!/bin/sh
mac="f0:79:60:0f:d3:0e"
if [ -z "${mac##f0:79:60*}" ]
then
echo "true"
else
echo "false"
fi
当删除与模式匹配的[ -z "${mac##f0:79:60*}" ]
最大可能部分时,检查结果字符串是否为空。$mac
f0:79:60*
答案2
首先,$($mac)
必须固定为$mac
,正如 Jea 之前所说。
也只是用例声明;双括号是bash (或者可能是 zsh)(编辑:实际上自 ksh 起就可用;bash 和 zsh 也采用了它)特定的,但 shebang 只是说“/bin/sh”,而不是“bash”。
这里有两个解决方案:
- 根据您的环境将第一行替换为
#!/bin/bash
、或其他内容,以明确您正在使用 bashism,或者,#!/usr/bin/bash
- 只需使用 case 语句,因为它是最便携的替代方案,如下所示:
#!/bin/sh
mac="f0:79:60:0f:d3:0e"
case "$mac" in ('f0:79:60'*)
echo "true"
;;(*)
echo "false"
;;esac