Как я могу расширить диапазон в строке в bash? - PullRequest
0 голосов
/ 03 марта 2020

В bash как я могу расширить диапазон в строковой переменной, чтобы я мог использовать его в a для l oop?

num=9999999X
num=`echo $num | sed 's/X/\{1..9\}/g'`
echo $num #  outputs 9999999{1..9}
echo ${num} #  outputs 9999999{1..9}
echo 9999999{1..9} #outputs 99999991 99999992 99999993 99999994 99999995 99999996 99999997 99999998 99999999
for i in $num
do 
        echo $i

done #  outputs 9999999{1..9}

, что я хочу, чтобы l oop через цифры, чтобы я мог отображать по одному в каждой строке.

Ответы [ 2 ]

1 голос
/ 04 марта 2020

Вы можете заменить X директивой форматирования, используя расширение параметров, а затем использовать ее вместе с printf; Например, с {1..3}:

$ str=9999999X
$ echo "${str/X/%d}"
9999999%d
$ printf "${str/X/%d}\n" {1..3}
99999991
99999992
99999993

или с X в середине строки:

$ str=999X9999
$ echo "${str/X/%d}"
999%d9999
$ printf "${str/X/%d}\n" {1..3}
99919999
99929999
99939999
1 голос
/ 03 марта 2020

Диапазоны не расширяются после расширения переменных. Используйте команду seq и поместите результаты в массив:

num=($(seq ${num/X/1} ${num/X/9}))
for i in "${num[@]}"
do
    echo "$i"
done
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...