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

关于嵌套参数扩展,检查这个答案:

一个参数扩展可以在另一个参数扩展中工作吗?

相关内容