Книга: Искусство программирования на языке сценариев командной оболочки

Пример 25-5. Копирование и конкатенация массивов

Пример 25-5. Копирование и конкатенация массивов

#! /bin/bash

# CopyArray.sh

#

# Автор: Michael Zick.

# Используется с его разрешения.

# "Принять из массива с заданным именем записать в массив с заданным именем"

#+ или "собственный Оператор Присваивания".

CpArray_Mac() {

# Оператор Присваивания

echo -n 'eval '

echo -n "$2" # Имя массива-результата

echo -n '=( ${'

echo -n "$1" # Имя исходного массива

echo -n '[@]} )'

# Все это могло бы быть объединено в одну команду.

# Это лишь вопрос стиля.

}

declare -f CopyArray # "Указатель" на функцию

CopyArray=CpArray_Mac # Оператор Присваивания

Hype()

{

# Исходный массив с именем в $1.

# (Слить с массивом, содержащим "-- Настоящий Рок-н-Ролл".)

# Вернуть результат в массиве с именем $2.

local -a TMP

local -a hype=( -- Настоящий Рок-н-Ролл )

$($CopyArray $1 TMP)

TMP=( ${TMP[@]} ${hype[@]} )

$($CopyArray TMP $2)

}

declare -a before=( Advanced Bash Scripting )

declare -a after

echo "Массив before = ${before[@]}"

Hype before after

echo "Массив after = ${after[@]}"

# Еще?

echo "Что такое ${after[@]:4:2}?"

declare -a modest=( ${after[@]:2:1} ${after[@]:3:3} )

# ---- выделение подстроки ----

echo "Массив Modest = ${modest[@]}"

# А что в массиве 'before' ?

echo "Массив Before = ${before[@]}"

exit 0

--

Массивы допускают перенос хорошо известных алгоритмов в сценарии на языке командной оболочки. Хорошо ли это -- решать вам.

Оглавление книги


Генерация: 1.199. Запросов К БД/Cache: 3 / 1
поделиться
Вверх Вниз