Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Π˜ΡΠΊΡƒΡΡΡ‚Π²ΠΎ программирования Π½Π° языкС сцСнариСв ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 67

Автор МСндСль ΠšΡƒΠΏΠ΅Ρ€

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 25-3. НСкоторыС спСцифичныС особСнности массивов

#!/bin/bash


declare -a colors

# ДопускаСтся объявлСниС массива Π±Π΅Π· указания Π΅Π³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π°.


echo "Π’Π²Π΅Π΄ΠΈΡ‚Π΅ ваши Π»ΡŽΠ±ΠΈΠΌΡ‹Π΅ Ρ†Π²Π΅Ρ‚Π° (раздСляя ΠΈΡ… ΠΏΡ€ΠΎΠ±Π΅Π»Π°ΠΌΠΈ)."


read -a colors # Π’Π²Π΅Π΄ΠΈΡ‚Π΅ хотя Π±Ρ‹ 3 Ρ†Π²Π΅Ρ‚Π° для дСмонстрации Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… свойств массивов.

# БпСцифичСский ΠΊΠ»ΡŽΡ‡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ 'read',

#+ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ Π²Π²ΠΎΠ΄ΠΈΡ‚ΡŒ нСсколько элСмСнтов массива.


echo


element_count=${#colors[@]}


# ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ количСства элСмСнтов Π² массивС.

# element_count=${#colors[*]} -- Π΄Π°Π΅Ρ‚ Ρ‚ΠΎΡ‚ ΠΆΠ΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚.

#

# ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ "@" позволяСт "Ρ€Π°Π·Π±ΠΈΠ²Π°Ρ‚ΡŒ" строку Π² ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠ°Ρ… Π½Π° ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ слова

#+ (Π²Ρ‹Π΄Π΅Π»ΡΡŽΡ‚ΡΡ слова, Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ±Π΅Π»Π°ΠΌΠΈ).


index=0


while [ "$index" -lt "$element_count" ]

do # Бписок всСх элСмСнтов Π² массивС.

echo ${colors[$index]}

let "index = $index + 1"

done

# ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт массива выводится Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΉ строкС.

# Если этого Π½Π΅ трСбуСтся, Ρ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ echo -n "${colors[$index]} "

#

# Π­ΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½Ρ‚Π½Ρ‹ΠΉ Ρ†ΠΈΠΊΠ» "for":

# for i in "${colors[@]}"

# do

# echo "$i"

# done

# (Бпасибо S.C.)


echo


# Π•Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½, Π±ΠΎΠ»Π΅Π΅ элСгантный, способ Π²Ρ‹Π²ΠΎΠ΄Π° списка всСх элСмСнтов массива.

echo ${colors[@]} # ${colors[*]} Π΄Π°Π΅Ρ‚ Ρ‚ΠΎΡ‚ ΠΆΠ΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚.


echo


# Команда "unset" удаляСт элСмСнты ΠΈΠ· массива, ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ массив Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ.

unset colors[1] # Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ 2-Π³ΠΎ элСмСнта массива.

# Π’ΠΎΡ‚ ΠΆΠ΅ эффСкт Π΄Π°Π΅Ρ‚ ΠΊΠΎΠΌΠ°Π½Π΄Π° colors[1]=

echo ${colors[@]} # Бписок всСх элСмСнтов массива -- 2-ΠΉ элСмСнт отсутствуСт.


unset colors # УдалСниС всСго массива.

# Π’ΠΎΡ‚ ΠΆΠ΅ эффСкт ΠΈΠΌΠ΅ΡŽΡ‚ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ unset colors[*]

#+ ΠΈ unset colors[@].

echo; echo -n "Массив Ρ†Π²Π΅Ρ‚ΠΎΠ² ΠΎΠΏΡƒΡΡ‚ΠΎΡˆΠ΅Π½."

echo ${colors[@]} # Бписок элСмСнтов массива пуст.


exit 0

Как Π²ΠΈΠ΄Π½ΠΎ ΠΈΠ· ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°, ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ ${array_name[@]} ΠΈΠ»ΠΈ ${array_name[*]} относится ΠΊΠΎ всСм элСмСнтам массива. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ количСство элСмСнтов массива, ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊ ${#array_name[@]} ΠΈΠ»ΠΈ ΠΊ ${#array_name[*]}. ${#array_name} -- это Π΄Π»ΠΈΠ½Π° (количСство символов) ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ элСмСнта массива, Ρ‚.Π΅. ${array_name[0]}.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 25-4. ΠŸΡƒΡΡ‚Ρ‹Π΅ массивы ΠΈ пустыС элСмСнты

#!/bin/bash

# empty-array.sh


# Π’Ρ‹Ρ€Π°ΠΆΠ°ΡŽ свою Π±Π»Π°Π³ΠΎΠ΄Π°Ρ€Π½ΠΎΡΡ‚ΡŒ Stephane Chazelas Π·Π° этот ΠΏΡ€ΠΈΠΌΠ΅Ρ€,

#+ ΠΈ Michael Zick Π·Π° Π΅Π³ΠΎ Π΄ΠΎΡ€Π°Π±ΠΎΡ‚ΠΊΡƒ.


# ΠŸΡƒΡΡ‚ΠΎΠΉ массив -- это Π½Π΅ Ρ‚ΠΎ ΠΆΠ΅ самоС, Ρ‡Ρ‚ΠΎ массив с пустыми элСмСнтами.


array0=( ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Π²Ρ‚ΠΎΡ€ΠΎΠΉ Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ )

array1=( '' ) # "array1" ΠΈΠΌΠ΅Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½ пустой элСмСнт.

array2=( ) # Массив "array2" Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ Π½ΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ элСмСнта, Ρ‚.Π΅. пуст.


echo

ListArray()

{

echo

echo "Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹ массива array0: ${array0[@]}"

echo "Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹ массива array1: ${array1[@]}"

echo "Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹ массива array2: ${array2[@]}"

echo

echo "Π”Π»ΠΈΠ½Π° ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ элСмСнта массива array0 = ${#array0}"

echo "Π”Π»ΠΈΠ½Π° ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ элСмСнта массива array1 = ${#array1}"

echo "Π”Π»ΠΈΠ½Π° ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ элСмСнта массива array2 = ${#array2}"

echo

echo "Число элСмСнтов Π² массивС array0 = ${#array0[*]}" # 3

echo "Число элСмСнтов Π² массивС array1 = ${#array1[*]}" # 1 (ΡΡŽΡ€ΠΏΡ€ΠΈΠ·!)

echo "Число элСмСнтов Π² массивС array2 = ${#array2[*]}" # 0

}


# ===================================================================


ListArray


# ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ элСмСнты Π² массивы


# Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½ΠΎΠ²Ρ‹Ρ… элСмСнтов Π² массивы.

array0=( "${array0[@]}" "Π½ΠΎΠ²Ρ‹ΠΉ1" )

array1=( "${array1[@]}" "Π½ΠΎΠ²Ρ‹ΠΉ1" )

array2=( "${array2[@]}" "Π½ΠΎΠ²Ρ‹ΠΉ1" )


ListArray


# ΠΈΠ»ΠΈ

array0[${#array0[*]}]="Π½ΠΎΠ²Ρ‹ΠΉ2"

array1[${#array1[*]}]="Π½ΠΎΠ²Ρ‹ΠΉ2"

array2[${#array2[*]}]="Π½ΠΎΠ²Ρ‹ΠΉ2"


ListArray


# Π’Π΅ΠΏΠ΅Ρ€ΡŒ прСдставим ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ массив ΠΊΠ°ΠΊ 'стСк' ('stack')

# ΠšΠΎΠΌΠ°Π½Π΄Ρ‹ Π²Ρ‹ΡˆΠ΅, ΠΌΠΎΠΆΠ½ΠΎ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌΠΈ 'push' -- Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠ³ΠΎ значСния Π½Π° Π²Π΅Ρ€ΡˆΠΈΠ½Ρƒ стСка

# 'Π“Π»ΡƒΠ±ΠΈΠ½Π°' стСка:

height=${#array2[@]}

echo

echo "Π“Π»ΡƒΠ±ΠΈΠ½Π° стСка array2 = $height"


# Команда 'pop' -- Π²Ρ‹Ρ‚Π°Π»ΠΊΠΈΠ²Π°Π½ΠΈΠ΅ элСмСнта стСка, находящСгося Π½Π° Π²Π΅Ρ€ΡˆΠΈΠ½Π΅:

unset array2[${#array2[@]}-1] # Π˜Π½Π΄Π΅ΠΊΡΠ°Ρ†ΠΈΡ массивов начинаСтся с нуля

height=${#array2[@]}

echo

echo "POP"

echo "Π“Π»ΡƒΠ±ΠΈΠ½Π° стСка array2, послС выталкивания = $height"


ListArray


# ВывСсти Ρ‚ΠΎΠ»ΡŒΠΊΠΎ 2-ΠΉ ΠΈ 3-ΠΉ элСмСнты массива array0

from=1 # Π˜Π½Π΄Π΅ΠΊΡΠ°Ρ†ΠΈΡ массивов начинаСтся с нуля

to=2 #

declare -a array3=( ${array0[@]:1:2} )

echo

echo "Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹ массива array3: ${array3[@]}"


# Π—Π°ΠΌΠ΅Π½Π° элСмСнтов ΠΏΠΎ ΡˆΠ°Π±Π»ΠΎΠ½Ρƒ

declare -a array4=( ${array0[@]/Π²Ρ‚ΠΎΡ€ΠΎΠΉ/2-ΠΉ} )

echo

echo "Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹ массива array4: ${array4[@]}"


# Π—Π°ΠΌΠ΅Π½Π° строк ΠΏΠΎ ΡˆΠ°Π±Π»ΠΎΠ½Ρƒ

declare -a array5=( ${array0[@]//Π½ΠΎΠ²Ρ‹ΠΉ?/старый} )

echo

echo "Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹ массива array5: ${array5[@]}"


# Надо лишь ΠΏΡ€ΠΈΠ²Ρ‹ΠΊΠ½ΡƒΡ‚ΡŒ ΠΊ Ρ‚Π°ΠΊΠΎΠΉ записи...

declare -a array6=( ${array0[@]#*Π½ΠΎΠ²Ρ‹ΠΉ} )

echo # Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ вас нСсколько ΡƒΠ΄ΠΈΠ²ΠΈΡ‚ΡŒ

echo "Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹ массива array6: ${array6[@]}"


declare -a array7=( ${array0[@]#Π½ΠΎΠ²Ρ‹ΠΉ1} )

echo # Π’Π΅ΠΏΠ΅Ρ€ΡŒ это вас ΡƒΠΆΠ΅ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡƒΠ΄ΠΈΠ²Π»ΡΡ‚ΡŒ

echo "Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹ массива array7: ${array7[@]}"


# Π’Ρ‹Π³Π»ΡΠ΄ΠΈΡ‚ΡŒ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΡ…ΠΎΠΆΠ΅ Π½Π° ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚...

declare -a array8=( ${array0[@]/Π½ΠΎΠ²Ρ‹ΠΉ1/} )

echo

echo "Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹ массива array8: ${array8[@]}"


# Π˜Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΎΠ±ΠΎ всСм этом?


# Π‘Ρ‚Ρ€ΠΎΠΊΠΎΠ²Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Π½Π°Π΄ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΌ элСмСнтом

#+ в массивС var[@].

# Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, BASH ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π²Π΅ΠΊΡ‚ΠΎΡ€Π½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ

# Если Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ получаСтся пустая строка, Ρ‚ΠΎ

#+ элСмСнт массива "исчСзаСт".


# Вопрос: это относится ΠΊ строкам Π² "строгих" ΠΈΠ»ΠΈ "мягких" ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠ°Ρ…?


zap='Π½ΠΎΠ²Ρ‹ΠΉ*'

declare -a array9=( ${array0[@]/$zap/} )

echo

echo "Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹ массива array9: ${array9[@]}"


# "...А с ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ говорят: "Π­Ρ‚ΠΎ Π³ΠΎΡ€ΠΎΠ΄ Π›Π΅Π½ΠΈΠ½Π³Ρ€Π°Π΄!"..."

declare -a array10=( ${array0[@]#$zap} )

echo

echo "Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹ массива array10: ${array10[@]}"


# Π‘Ρ€Π°Π²Π½ΠΈΡ‚Π΅ массивы array7 ΠΈ array10

# Π‘Ρ€Π°Π²Π½ΠΈΡ‚Π΅ массивы array8 ΠΈ array9


# ΠžΡ‚Π²Π΅Ρ‚: Π² "мягких" ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠ°Ρ….


exit 0

Π Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ ${array_name[@]} ΠΈ ${array_name[*]} такая ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΌΠ΅ΠΆΠ΄Ρƒ [email protected] ΠΈ $*. Π­Ρ‚ΠΈ свойства массивов ΡˆΠΈΡ€ΠΎΠΊΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅.

# ΠšΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ массивов.

array2=( "${array1[@]}" )

# ΠΈΠ»ΠΈ

array2="${array1[@]}"


# Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ элСмСнт.

array=( "${array[@]}" "Π½ΠΎΠ²Ρ‹ΠΉ элСмСнт" )

# ΠΈΠ»ΠΈ

array[${#array[*]}]="Π½ΠΎΠ²Ρ‹ΠΉ элСмСнт"


# Бпасибо S.C.


ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΡ подстановки ΠΊΠΎΠΌΠ°Π½Π΄ -- array=( element1 element2 ... elementN ), позволяСт Π·Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ содСрТимоС тСкстовых Ρ„Π°ΠΉΠ»ΠΎΠ² Π² массивы.

#!/bin/bash


filename=sample_file


# cat sample_file

#

# 1 a b c

# 2 d e fg


declare -a array1


array1=( `cat "$filename" | tr '\n' ' '`) # Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ° содСрТимого Ρ„Π°ΠΉΠ»Π°

# $filename в массив array1.

# Π’Ρ‹Π²ΠΎΠ΄ Π½Π° stdout.

# с Π·Π°ΠΌΠ΅Π½ΠΎΠΉ символов ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° строки Π½Π° ΠΏΡ€ΠΎΠ±Π΅Π»Ρ‹.


echo ${array1[@]} # список элСмСнтов массива.

# 1 a b c 2 d e fg

#

# КаТдоС "слово", Π² тСкстовом Ρ„Π°ΠΉΠ»Π΅, отдСляСмоС ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΡ€ΠΎΠ±Π΅Π»Π°ΠΌΠΈ

#+ заносится Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ элСмСнт массива.


element_count=${#array1[*]}

echo $element_count # 8


ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 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

--

ΠœΠ°ΡΡΠΈΠ²Ρ‹ Π΄ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‚ пСрСнос Ρ…ΠΎΡ€ΠΎΡˆΠΎ извСстных Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² Π² сцСнарии Π½Π° языкС ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ. Π₯ΠΎΡ€ΠΎΡˆΠΎ Π»ΠΈ это -- Ρ€Π΅ΡˆΠ°Ρ‚ΡŒ Π²Π°ΠΌ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 25-6. Бтарая, добрая: "ΠŸΡƒΠ·Ρ‹Ρ€ΡŒΠΊΠΎΠ²Π°Ρ" сортировка

#!/bin/bash

# bubble.sh: "ΠŸΡƒΠ·Ρ‹Ρ€ΡŒΠΊΠΎΠ²Π°Ρ" сортировка.


# На ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΏΡ€ΠΎΡ…ΠΎΠ΄Π΅ ΠΏΠΎ сортируСмому массиву,

#+ ΡΡ€Π°Π²Π½ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π΄Π²Π° смСТных элСмСнта, ΠΈ, Ссли Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ, ΠΎΠ½ΠΈ ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ мСстами.

# Π’ ΠΊΠΎΠ½Ρ†Π΅ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΡ…ΠΎΠ΄Π°, самый "тяТСлый" элСмСнт "опускаСтся" Π² ΠΊΠΎΠ½Π΅Ρ† массива.

# Π’ ΠΊΠΎΠ½Ρ†Π΅ Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΡ…ΠΎΠ΄Π°, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΠΎ "тяТСсти" элСмСнт Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ Π²Ρ‚ΠΎΡ€ΠΎΠ΅ мСсто снизу.

# И Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅.

# ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π½Π° ΠΎΠ΄Π½ΠΎ сравнСниС мСньшС ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ.

# ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ ускорСниС Ρ€Π°Π±ΠΎΡ‚Ρ‹ сцСнария Π½Π° послСдних ΠΏΡ€ΠΎΡ…ΠΎΠ΄Π°Ρ….


exchange()

{

# ΠŸΠΎΠΌΠ΅Π½ΡΡ‚ΡŒ мСстами Π΄Π²Π° элСмСнта массива.

local temp=${Countries[$1]} # ВрСмСнная пСрСмСнная

Countries[$1]=${Countries[$2]}

Countries[$2]=$temp