car*_*cal 4 array shell-script printf
我有一个数组,其中包含有关每个 NIC 的详细信息。每个数组索引由三个空格分隔的值组成。
我想要一个漂亮的表格作为输出。有没有办法为索引中的每个值分配格式模式?
到目前为止,这是我使用的:
NIC_details[0]='wlp2s0 192.168.1.221 xx:xx:xx:xx:xx:xx'
NIC_details[1]='wwan0 none xx:xx:xx:xx:xx:xx'
NIC_details[2]='virbr0 192.168.122.1 00:00:00:00:00:00'
printf "%-20s\n" "${NIC_details[@]}"
Run Code Online (Sandbox Code Playgroud)
有没有办法通过位置 $1、$2 和 $3 访问数组索引中的值,知道它们是空格分隔的,然后为每个 $X 位置应用格式模式?
我也试过
echo "$i" | column -t
Run Code Online (Sandbox Code Playgroud)
但它并没有带来预期的结果。
这是对您已经在做的事情的轻微修改:
set -f # to prevent filename expansion
for i in ${!NIC_index[@]}
do
printf "%-20s" ${NIC_details[i]}
printf "\n"
done
Run Code Online (Sandbox Code Playgroud)
我添加了一个for循环来遍历所有数组索引——这就是${!NIC...语法。由于它是一个数字数组,您也可以直接在索引上循环。
请注意,我故意不加${NIC_details[i]} 引号,以便 shell 会在您用来分隔值的空格上拆分值。printf因此看到 3 个值,因此对每个值重复 %-20s 格式。然后我在每个 NIC 之后添加一个换行符以制作一个漂亮的表格。
的set -f,如果我们离开不带引号的变量,在顶部是重要的; 否则,shell 将介入并尝试将它在未加引号的变量中看到的任何通配符进行glob。
示例输出:
wlp2s0 192.168.1.221 xx:xx:xx:xx:xx:xx
wwan0 none xx:xx:xx:xx:xx:xx
virbr0 192.168.122.1 00:00:00:00:00:00
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7731 次 |
| 最近记录: |