Bash

來自 MAC 地址的供應商(前三部分)

  • March 16, 2021

如何從 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

你已經有了bash解決方案,它需要兩個賦值,但如果你只需要輸出,你可以省略第二個賦值並直接輸出結果,因為bash還不支持嵌套參數替換(也許將來會支持)。

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

cut簡稱為:

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

您也可以使用awk

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

關於嵌套參數擴展,請檢查此答案:

參數擴展可以在另一個參數擴展中工作嗎?

引用自:https://unix.stackexchange.com/questions/639636