如何使用数组元素的参数执行 bash 命令?

How to execute a bash command with arguments from array elements?

我正在 Linux 上编写一个简单的 bash 脚本来 ping 一些主机,例如:

ping -c 1 google.com
ping -c 1 amazon.com
...

在我的方法中,我将主机从一个单独的文件加载到一个数组中,然后遍历元素。使用数组中的元素调用 ping 命令时会出现问题。执行以下脚本会给我一条错误消息。

#!/bin/bash

IFS=$'\n' read -d '' -r hosts < hostnames.txt

for host in "${hosts[@]}"
do
    ping -c 1 ${host}
done

我猜语法有问题,但我还没弄清楚。

您的 hostnames.txt 是在 Windows 机器上生成的?

您的主机名有尾随 \r 个字符,因此查找失败。

试试这个:

cp hostnames.txt hostnames.txt.bkp
dos2unix hostnames.txt.bkp hostnames.txt

然后再次 运行 您的脚本。

如果您没有安装 dos2unix 并且不想安装它...也许您已经安装了 tr。在那种情况下,这也应该可以解决问题:

tr -d '\r' < hostnames.txt.bkp > hostnames.txt