拆分 bash 命令行参数

拆分 bash 命令行参数

这是拆分冒号分隔的 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

相关内容