如何从 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
关于嵌套参数扩展,检查这个答案: