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
중첩된 매개변수 확장에 대해서는 다음 답변을 확인하세요.