shell - Вставить символ с разными индексами в строку

В конечном итоге он станет частью более крупного скрипта, поэтому его необходимо написать в сценарии оболочки. Простая задача на других языках, но у меня возникли проблемы с ее выполнением в оболочке. В основном у меня есть строка, и я хочу вставить "." по всем возможным индексам в строке. Вывод может быть с новой строкой или разделен пробелами. Кто-нибудь может помочь?

Пример:
ввод: "abcd"

вывод: ".abcd
a.bcd
ab.cd
abc.d
abcd."

OR

вывод: ".abcd a.bcd ab.cd abc.d abcd."


person Mike Weber    schedule 05.04.2013    source источник


Ответы (1)


Простой цикл for:

input=abcd
for ((i=0; i<${#input}+1; i++))
do
    echo ${input::$i}.${input:$i}
done

Это просто нарезает строку по каждому индексу и вставляет .. Вы можете изменить echo на что-то еще, например, на добавление к массиву, если вы, конечно, хотите сохранить их вместо вывода.

person FatalError    schedule 05.04.2013
comment
+1, просто (для OP, возможно, не имеет значения) примечание: чтобы это работало и под ksh, вам нужно явно указать начальный индекс, например ${input:0:$i}. Парсер ksh93 лает на ${foo::$bar}. - person Adrian Frühwirth; 05.04.2013
comment
Похоже, что строка не работает в sh. Итак, я попробовал следующее, но эхо-строка выдает ошибку неправильной замены. max=$((${#input}+1)); for i in 'seq 0 $max'; do; echo ${input::$i}.${input:$i}; done; *-' в коде на самом деле обратные галочки ` - person Mike Weber; 06.04.2013
comment
После дальнейшего изучения системы, над которой я работаю, на самом деле это тире. - person Mike Weber; 06.04.2013