这是拆分冒号分隔的 bash 命令行参数的最佳方法吗?
#!/bin/bash
hostlist=`echo $1| awk '{split($0,Ip,":")} END{for (var in Ip) print Ip[var];}'`
for host in $hostlist
do
....
done
答案1
另一种方法是使用IFS,shell 将字符串拆分为字段的内置方法。
OLDIFS=$IFS
IFS=':'
set -f
for host in $hostlist; do
set +f
echo "$host"
done
set +f
IFS=$OLDIFS
set -f
关闭文件名生成(通配符):没有它,通配符*?\[
将在每个单词中扩展。
答案2
我认为最简单的解决方案就是使用 bash 内置函数:
#!/bin/bash
hostlist=${1//:/ } # this will replace all : with a space
for host in $hostlist ; do
echo ${host}
done
另一种方法(仍然比 awk 解决方案更简单)是使用 cut,尽管这可能取决于 GNU cut。
#!/bin/bash
hostlist=$(echo $1 | cut -d : --output-delimiter=" " -f 1-)
for host in $hostlist ; do
echo ${host}
done