要根据原始代码和更正的版本/代码审查来回答这个线程:
#ideally use variable names that do not exist as a command
hosts=()
FILENAME="/home/somethin/.hosts.conf"
ips=`cat $FILENAME | grep '322'`
for line in $ips; do
hosts+=("`echo $line | awk '{print $1}'`")
#alternative for shells not supporting the += operator:
#hosts=("${hosts[@]}" "`echo $line | awk '{print $1}'`")
done
echo ${hosts[@]}
有几个问题需要指出,这给您的印象是您的脚本“卡在 awk 上”
- 您每次都重新分配主机
hosts=$(`awk '{print $1}'`)
- 有意与否,您选择的是相反的,即与 grep 标志不匹配
-v
。
- 您正在执行以美元和反引号表示的嵌套命令替换,输入不包含命令:
$(
awk '{print $1}' )
。
- awk 没有给出任何输入
echo variablename
只会打印 bash 数组的第一个元素
awk
注意:和可以执行很多操作sed
,但两者都旨在作为更详细但结构更好的 bash/shell 脚本的快捷方式,这些脚本在以后更容易扩展。所以有一个权衡,你开始的方式没有错......