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、文字列をフィールドに分割するためのシェルの組み込み方法です。

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

もう1つのアプローチ(awkソリューションよりもまだ簡単です)はcutを使用することです。しかし、これはGNUカットによって異なります。

#!/bin/bash
hostlist=$(echo $1 | cut -d : --output-delimiter=" " -f 1-) 

for host in $hostlist ; do
    echo ${host}
done

関連情報