이것이 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"만 표시됩니다.
여기에는 두 가지 해결책이 있습니다.
- 환경에 따라 첫 번째 줄을
#!/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