首页 > 解决方案 > 如何显示变量名而不是其值

问题描述

这就是我所拥有的。

Server1=$(echo 192.168.0.1)
Server2=$(echo 192.168.0.2)
Server3=$(echo 192.168.0.3)

servers=($Server1 $Server2   $Server3)

for online in ${servers[@]}
do
ping $online -c2 > /dev/null

if [ $? -eq 0 ]
then
echo successful
else
echo “Cannot connect to “${!online}
fi
done

现在它输出“无法连接到”我希望它说“无法连接到 Server1 或任何其他。

标签: bash

解决方案


您可以只将名称存储在数组中并使用间接扩展来获取值:

Server1=192.168.0.1
Server2=192.168.0.2
Server3=192.168.0.3
servers=(Server1 Server2 Server3)

for online in "${servers[@]}"; do
    if ping "${!online}" -c2 > /dev/null; then
         echo successful
    else
         echo "Cannot connect to ${online} with ip ${!online}"
    fi
done

推荐阅读