Как вставить строку в массив по-разному

У меня есть строка, как показано ниже. str = '014387650' Теперь я хочу разбить эту строку, как показано ниже, и поместить значение в массив.

A[0]=0 A[1]=01 A[2]=014 A[3]=0143 A[4]=01438 A[5]=014387 A[6]=0143876 A[7]=01438765 A[8]=014387650 

7 Solutions collect form web for “Как вставить строку в массив по-разному”

В bash должно работать следующее:

 str='014387650' arr=() for ((i=0; i<${#str}; i++)); do arr+=("${arr[i-1 < 0 ? 0 : i-1]}${str:$i:1}") done 

Результат:

 $ printf '<%s>\n' "${arr[@]}" <0> <01> <014> <0143> <01438> <014387> <0143876> <01438765> <014387650> 

Явное объявление массива выполняется с помощью встроенного объявления:

  declare -a ARRAYNAME 

Переменные массива также могут быть созданы с использованием составных присвоений в этом формате:

  ARRAY=(value1 value2 ... valueN) 

в твоем случае:

  #!/bin/bash str='014387650' declare -a A for (( c=0; c<${#str}; c++ )) do A[c]=`echo ${str:0:$(( $c + 1 ))}` echo "A[$c]="${A[$c]} done 

вывод:

  A[0]=0 A[1]=01 A[2]=014 A[3]=0143 A[4]=01438 A[5]=014387 A[6]=0143876 A[7]=01438765 A[8]=014387650 

если вы просто хотите поместить строку в массив:

  declare -a A str=014387650 A=${str[*]} echo ${A[*]} 014387650 echo ${A[3]} 4 

Другой путь:

 triangle_split() { _len=1 while [ "$_len" -le "${#1}" ]; do printf '%.*s\n' "$_len" "$1" : "$((_len+=1))" done } IFS=' ' A=($(triangle_split 014387650)) printf '%s\n' "${A[@]}" 

Вы можете сделать:

 set --; src=014387650 OPTIND=1 tgt= while getopts : na -"$src" do tgt=$tgt$OPTARG set "$@" "A[$#]=$tgt" done; printf %s\\n "$@" 

 A[0]=0 A[1]=01 A[2]=014 A[3]=0143 A[4]=01438 A[5]=014387 A[6]=0143876 A[7]=01438765 A[8]=014387650 

Очевидный подход: заполнить массив назад и нарезать последний символ строки, когда мы идем:

 #!/bin/bash str="014387650" i=${#str} while [ $i -gt 0 ] ; do A[$((--i))]=$str str=${str%?} done printf "%s\n" ${A[*]} 

Вывод:

 0
 01
 014
 0143
 01438
 014387
 0143876
 01438765
 014387650

Очевидный подход: давайте опустимся вниз по массиву, измельчая по одному символу за раз из хвоста строковой переменной, которая назначается последовательным элементам:

 #!/bin/bash str="014387650" while [ ${#str} -gt 0 ] ; do A[$((${#str}-1))]=$str str=${str%?} done printf "%s\n" ${A[*]} 

Вывод:

 0
 01
 014
 0143
 01438
 014387
 0143876
 01438765
 014387650

Поскольку мы являемся специфичными для Bash, мы можем также перефразировать логику с помощью цикла for :

 #!/bin/bash str="014387650" for (( i=${#str} - 1; i >= 0; i-- )); do A[$i]=$str str=${str%?} done printf "%s\n" ${A[*]} 

Может быть, это поможет:

 #!/bin/bash a="014387650" i=0; unset -v AB while (( i<${#a} )) do A[i]=${a:0:i+1} B+=("A[$i]=${A[i++]}") done printf '%s\n' "${B[@]}" 

Вывод:

 A[0]=0 A[1]=01 A[2]=014 A[3]=0143 A[4]=01438 A[5]=014387 A[6]=0143876 A[7]=01438765 A[8]=014387650 
  • Объединение basename {} и операций строки в bash
  • Найти и заменить имя хоста на ip-адрес в файле
  • Создайте несколько имен пользователей и UID в Linux с помощью сценария оболочки
  • Флокирование filedescriptor в сценарии оболочки
  • Как правильно использовать $ _ внутри скрипта tcsh, полученного из другого tcsh-скрипта?
  • обработка текста: извлечение частей файла и запись их в одну строку
  • Сценарий Bash, который автоматически убивает процессы, когда загрузка процессора / памяти становится слишком высокой
  • Изменение измененной даты файла в зависимости от даты в имени файла
  • Почему этот скрипт зацикливается на первой строке файла txt?
  • Пройти через код состояния выхода после использования ||
  • Скрипт для сравнения с файлами Excel и различиями печати
  • Interesting Posts

    Как сделать bash glob строковой переменной?

    Странное поведение скрипта bash

    Перенумерация окон в tmux

    В каком дистрибутиве используется ядро ​​3.19 или выше

    Захват вывода / перенаправления команд, скопированных с помощью &&

    Как я могу автоматически пересылать системную почту?

    Запустите другой диспетчер окон в определенной рабочей области в XMonad

    Согласование шаблонов и удаление этого шаблона с помощью sed

    Нужно ли мне пространство подкачки, если у меня более чем достаточное количество оперативной памяти?

    Переадресация ввода-вывода и головная команда

    stdin: нет в tty

    Запустить скрипт при попытке входа в систему?

    Использование команды чтения оболочки с функциями редактирования в реальном времени (например, чтение)

    x11 сохраняет замороженную виртуальную консоль

    Будет ли изображение 3.16.0-4-amd64 нарушать мою систему из-за ошибки BUILD_EXCLUSIVE?

    Linux и Unix - лучшая ОС в мире.