これが解決策です。リストを割り当ててから項目を追加してください:
#!/bin/bash
array_test=()
for iface in $(ifconfig | cut -d ' ' -f1| tr ':' '\n' | awk NF)
do
printf "$iface\n"
array_test+=("$iface")
done
echo ${array_test[@]}
出力を 1 行に 1 項目表示する場合:
for i in "${array_test[@]}"; do echo "$i"; done
出力から localhost を削除するには:
if [ "$iface" != "lo" ]
then
array_test+=("$iface")
fi
私の試み:
readarray -t interfaces < <(ip l | awk -F ":" '/^[0-9]+:/{dev=$2 ; if ( dev !~ /^ lo$/) {print $2}}')
for i in "${interfaces[@]// /}" ; do echo "$i" ; done
bash
空白で区切られた (スペース、タブ、改行) リストから配列を作成します。例えばarray=(a b c)
.コマンド置換を使用できます ($()
) を使用して、このような空白で区切られたリストを生成します。例:
$ ifaces=( $(ip addr list | awk -F': ' '/^[0-9]/ {print $2}') )
作成したばかりの配列を出力します:
$ declare -p ifaces
declare -a ifaces=([0]="lo" [1]="eth0" [2]="eth1" [3]="br1" [4]="br0" [5]="ppp0")
lo
を除外するには :
$ ifaces=( $(ip addr list | awk -F': ' '/^[0-9]/ && $2 != "lo" {print $2}') )
$ declare -p ifaces
declare -a ifaces=([0]="eth0" [1]="eth1" [2]="br1" [3]="br0" [4]="ppp0")
どうしても ifconfig
を使いたい場合 ip
ではなく 、これを試してください:
ifaces=( $(ifconfig | awk -F':' '/^[^ ]*: / && $1 != "lo" {print $1}') )