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

또 다른 접근 방식(awk 솔루션보다 여전히 간단함)은 cut을 사용하는 것입니다. 하지만 이는 GNU cut에 따라 달라질 수 있습니다.

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

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

관련 정보