Разбор диапазонов в дискретные значения в Bash

Если вы пытались составить список каталогов с помощью таких команд, как ls, dir, это не поможет.

Если вы используете любой FTP-клиент с графическим интерфейсом, например filezilla, будут показаны все каталоги.

-4
11.06.2020, 17:16
3 ответа

Если вы измените ввод на

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

затем

eval echo $hostlist | tr ' ',
host1,host2,host3,host4,host5,host7,host13,host14,host15
-1
19.03.2021, 02:31

Попробуйте 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
-1
19.03.2021, 02:31

Попробуйте это:

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,
0
19.03.2021, 02:31

Теги

Похожие вопросы