입력하다

입력하다

사용자는 범위 목록을 제공합니다. 이를 이산 값 목록으로 변환해야 합니다.

예를 들어

입력하다

host[1-5],host7,host[13-15]

산출

host1,host2,host3,host4,host5,host7,host13,host14,host15.

이 결과를 어떻게 얻을 수 있습니까?

답변1

이 시도:

hosts=($(echo "host[1-5],host7,host[13-15]" | sed 's/,/ /g'))
string=""
for h in ${hosts[@]}; do 
  if [[ ! ${h//[^0-9]/} =~ ^[0-9]$ ]]; then
      for i in $(seq ${h//[^0-9]/ }); do 
        string+="${h%[*}$i,"
      done
  else
    string+="$h,"
  fi
done

echo "${string%,}"

산출:

host1,host2,host3,host4,host5,host7,host13,host14,host15,

답변2

bash"파라미터 확장/패턴 대체"를 시도해보세요

$ hostlist=host[1-5],host7,host[13-15]
$ H1=${hostlist//[/{}
$ H2=${H1//]/\}}
$ H3=${H2//,/ }
$ H4=$(eval echo ${H3//-/..})
$ H5=${H4// /,}
$ echo "$H5"
host1,host2,host3,host4,host5,host7,host13,host14,host15

답변3

입력을 다음으로 변경하면

hostlist=host{{1..5},7,{13..15}}

그 다음에

eval echo $hostlist | tr ' ' ,
host1,host2,host3,host4,host5,host7,host13,host14,host15

관련 정보