Linux
/bin/sh 中的部分匹配字元串
有人可以向我解釋為什麼這不部分匹配 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 語句中呼叫,否則它不會替換變數。
首先,
$($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
由於您使用的是 BusyBox (ash shell),因此問題似乎是您的腳本使用了 shell (
[[...]]
) 無法辨識的構造。此外,"$($mac)"
應改為$mac
.這是一個可以在 BusyBox 上執行的更正版本(作為尾巴火花兔耳答案的替代品):
#!/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*