これがmacaddressと部分的に一致しない理由を誰かが私に説明できますか$mac
?
#!/bin/sh
mac="f0:79:60:0f:d3:0e"
if [[ "$($mac)" = 'f0:79:60*' ]]
then
echo "true"
else
echo "false"
fi
ifステートメント内で呼び出す必要があります"$($mac)"
。それ以外の場合、変数は置き換えられません。
答え1
[[...]]
BusyBox(ash shell)を使用しているため、スクリプトはシェルが認識しない構文()を使用しているようです。また"$($mac)"
、に変更する必要があります$mac
。
BusyBoxで動作する修正版は次のとおりです(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
また、ユースケースの説明では、二重括弧はbash(またはおそらくzsh)によって異なりますが(編集:ksh以降は実際に利用可能であり、bashとzshもこれを採用しています)、shebangには「bash」の代わりに「/bin / sh」のみが表示されます。
これには2つの解決策があります。
- 環境に応じて最初の行を
#!/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