MAC 주소 공급업체(처음 세 부분)

MAC 주소 공급업체(처음 세 부분)

MAC 주소에서 처음 세 부분을 어떻게 얻나요?

$ mac=11:22:33:44:55:66
$ vendor=${${mac//:/}:0:6}
bash: ${${mac//:/}:0:6}: bad substitution

${mac//:/}삭제 :하고 :0:6처음 6자를 가져와야 합니까?

또는 다른 방법으로:

vendor=${${mac:0:8}//:/}
bash: ${${mac:0:8}//:/}: bad substitution

예상되는: 112233. 올바른 구문은 무엇입니까?

이는 작동하지만 다음 두 가지 작업이 필요합니다.

vendor=${mac//:/}
vendor=${vendor:0:6}
echo $vendor
112233

단 한 줄의 bash로 이 작업을 수행할 수 있습니까?

GNU bash 버전은 5.1.0입니다.

답변1

bash이미 솔루션이 있고 두 개의 할당이 필요하지만 출력만 필요한 경우 중첩된 매개변수 대체가 아직 지원되지 않으므로(아마도 미래에 지원될 예정이므로) 두 번째 할당을 생략하고 결과를 직접 출력할 수 있습니다 bash.

$ mac='11:22:33:44:55:66'
$ vendor=${mac//:}
$ echo ${vendor::6}

또는 cut간단하게:

cut -d: -f1,2,3 --output-delimiter= <<<"$mac"

답변2

awk다음을 사용할 수도 있습니다 .

$ mac=11:22:33:44:55:66
$ echo "$mac" | awk -F':' '{ print $1""$2""$3}'
112233

중첩된 매개변수 확장에 대해서는 다음 답변을 확인하세요.

하나의 매개변수 확장이 다른 매개변수 확장 내에서 작동할 수 있습니까?

관련 정보