
MACアドレスから最初の3つの部分をどのように取得しますか?
$ 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
。正しい構文は何ですか?
これは機能しますが、次の2つの作業が必要です。
vendor=${mac//:/}
vendor=${vendor:0:6}
echo $vendor
112233
1行のbashでこれを行うことはできますか?
GNU bashのバージョンは5.1.0です。
答え1
bash
すでにソリューションがあり、2つの割り当てが必要ですが、出力のみが必要な場合は、入れ子になったパラメータ置換はまだサポートされていないため(おそらく将来サポートされる予定です)、2番目の割り当てを省略して結果を直接出力できます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
ネストされたパラメータ拡張については、次の回答を確認してください。