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

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ «Командная строка LinuxΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 110

Автор Шоттс Уильям

10Β Β Β Β Β Β 2Β Β Β Β Β Β Β Β 22Β Β Β Β Β Β 0

11Β Β Β Β Β Β 5Β Β Β Β Β Β Β Β 23Β Β Β Β Β Β 0

Total files = 80

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ запустили ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ hours, ΠΏΠ΅Ρ€Π΅Π΄Π°Π² Π΅ΠΉ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ для Π°Π½Π°Π»ΠΈΠ·Π°. Она Π²Ρ‹Π²Π΅Π»Π° Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ, ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΡƒΡŽ число Ρ„Π°ΠΉΠ»ΠΎΠ², ΠΈΠ·ΠΌΠ΅Π½ΡΠ²ΡˆΠΈΡ…ΡΡ Π² ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ час суток (0–23). НиТС ΠΏΠΎΠΊΠ°Π·Π°Π½ ΠΊΠΎΠ΄, ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡŽΡ‰ΠΈΠΉ Π²Ρ‹Π²ΠΎΠ΄ этой Ρ‚Π°Π±Β­Π»ΠΈΡ†Ρ‹:

#!/bin/bash

# hours : сцСнарий для подсчСта Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ измСнСния

usage () {

Β Β Β Β Β Β Β Β echo "usage: $(basename $0) directory" >&2

}

# Π£Π±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ являСтся ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠΌ

if [[ ! -d $1 ]]; then

Β Β Β Β Β Β Β Β usage

Β Β Β Β Β Β Β Β exit 1

fi

# Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ массив

for i in {0..23}; do hours[i]=0; done

# Π‘ΠΎΠ±Ρ€Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅

for i in $(stat -c %y "$1"/* | cut -c 12-13); do

Β Β Β Β Β Β Β Β j=${i/#0}

Β Β Β Β Β Β Β Β ((++hours[j]))

Β Β Β Β Β Β Β Β ((++count))

done

# ВывСсти Π΄Π°Π½Π½Ρ‹Π΅

echo -e "Hour\tFiles\tHour\tFiles"

echo -e "----\t-----\t----\t-----"

for i in {0..11}; do

Β Β Β Β Β Β Β Β j=$((i + 12))

Β Β Β Β Β Β Β Β printf "%02d\t%d\t%02d\t%d\n" $i ${hours[i]} $j ${hours[j]}

done

printf "\nTotal files = %d\n" $count

Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΠΉ состоит ΠΈΠ· ΠΎΠ΄Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ (usage) ΠΈ основного Ρ‚Π΅Π»Π° с Ρ‡Π΅Ρ‚Ρ‹Ρ€ΡŒΠΌΡ Ρ€Π°Π·Π΄Π΅Π»Π°ΠΌΠΈ. Π’ ΠΏΠ΅Ρ€Π²ΠΎΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅ провСряСтся, являСтся Π»ΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°. Если Π½Π΅Ρ‚, сцСнарий Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ сообщСниС с ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ ΠΎ порядкС использования ΠΈ Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ.

Π’Ρ‚ΠΎΡ€ΠΎΠΉ Ρ€Π°Π·Π΄Π΅Π» ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ массив hours. Для этого ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ элСмСнту массива присваиваСтся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 0. ΠœΠ°ΡΡΠΈΠ²Ρ‹ Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΠ΅Ρ€Π΅Π΄ использованиСм, Π½ΠΎ Π½Π°ΡˆΠ΅ΠΌΡƒ ΡΡ†Π΅Π½Π°Ρ€ΠΈΡŽ Π²Π°ΠΆΠ½ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π² массивС Π½Π΅ ΠΎΡΡ‚Π°Π²Π°Π»ΠΎΡΡŒ элСмСнтов с пустыми значСниями. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Π½Π΅ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ способ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ†ΠΈΠΊΠ»Π°. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ подстановку Π² Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Ρ… скобках ({0..23}), ΠΌΡ‹ смогли Π±Π΅Π· Ρ‚Ρ€ΡƒΠ΄Π° ΡΠ³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ слов для ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ for.

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Ρ€Π°Π·Π΄Π΅Π» осущСствляСт сбор Π΄Π°Π½Π½Ρ‹Ρ…, вызывая ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ stat для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅. Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ cut ΠΈΠ· Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° извлСкаСтся Π΄Π²ΡƒΠ·Π½Π°Ρ‡Π½Ρ‹ΠΉ час. Π’Π½ΡƒΡ‚Ρ€ΠΈ Ρ†ΠΈΠΊΠ»Π° выполняСтся ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ Π²Π΅Π΄ΡƒΡ‰ΠΈΡ… Π½ΡƒΠ»Π΅ΠΉ ΠΈΠ· поля с часом, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΈΠ½Π°Ρ‡Π΅ командная ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ° попытаСтся (ΠΈ, Π² ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΌ счСтС, ΠΏΠΎΡ‚Π΅Ρ€ΠΏΠΈΡ‚ Π½Π΅ΡƒΠ΄Π°Ρ‡Ρƒ) ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ значСния с 00 ΠΏΠΎ 09 ΠΊΠ°ΠΊ Π²ΠΎΡΡŒΠΌΠ΅Ρ€ΠΈΡ‡Π½Ρ‹Π΅ числа (см. Ρ‚Π°Π±Π». 34.1). Π”Π°Π»Π΅Π΅ сцСнарий ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ элСмСнта массива, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠΌΡƒ часу дня. НаконСц, Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ счСтчик (count), хранящий ΠΎΠ±Ρ‰Π΅Π΅ число Ρ„Π°ΠΉΠ»ΠΎΠ² Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅.

ПослСдний Ρ€Π°Π·Π΄Π΅Π» Π² сцСнарии Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ содСрТимоС массива. Π‘Π½Π°Ρ‡Π°Π»Π° выводится ΠΏΠ°Ρ€Π° строк Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°, Π° Π·Π°Ρ‚Π΅ΠΌ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Ρ†ΠΈΠΊΠ», ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡŽΡ‰ΠΈΠΉ Π²Ρ‹Π²ΠΎΠ΄ Π² Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ ΠΊΠΎΠ»ΠΎΠ½ΠΊΠΈ. Π’ Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ выводится ΠΎΠ±Ρ‰Π΅Π΅ число Ρ„Π°ΠΉΠ»ΠΎΠ².

ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ с массивами

ΠœΠ°ΡΡΠΈΠ²Ρ‹ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ мноТСство Ρ‚ΠΈΠΏΠΎΠ²Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ массивов, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΈΡ… Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ², сортировка ΠΈ Π΄Ρ€., ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² примСнСния Π² сцСнариях.

Π’Ρ‹Π²ΠΎΠ΄ содСрТимого всСго массива

Для доступа ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ элСмСнту массива ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ индСксы * ΠΈ @. Π’Π°ΠΊ ΠΆΠ΅ ΠΊΠ°ΠΊ ΠΈ Π² случаС с ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹ΠΌΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ, индСкс @ ΠΈΠΌΠ΅Π΅Ρ‚ Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ ΠΏΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Ρ†Π΅Π½Π½ΠΎΡΡ‚ΡŒ. НапримСр:

[[email protected] ~]$ animals=("a dog" "a cat" "a fish")

[[email protected] ~]$ for i in ${animals[*]}; do echo $i; done

a

dog

a

cat

a

fish

[[email protected] ~]$ for i in ${animals[@]}; do echo $i; done

a

dog

a

cat

a

fish

[[email protected] ~]$ for i in "${animals[*]}"; do echo $i; done

a dog a cat a fish

[[email protected] ~]$ for i in "${animals[@]}"; do echo $i; done

a dog

a cat

a fish

ΠœΡ‹ создали массив animals ΠΈ сохранили Π² Π½Π΅ΠΌ Ρ‚Ρ€ΠΈ строки ΠΏΠΎ Π΄Π²Π° слова Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ. Π—Π°Ρ‚Π΅ΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ»ΠΈ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ Ρ†ΠΈΠΊΠ»Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ, ΠΊΠ°ΠΊ выполняСтся Ρ€Π°Π·Π±ΠΈΠ΅Π½ΠΈΠ΅ содСрТимого массива Π½Π° слова. Π˜Π½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΠΈ ${animals[*]} ΠΈ ${animals[@]} Π΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‚ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½ΠΎ, Ссли ΠΎΠ½ΠΈ Π½Π΅ Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ Π² ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ. ИндСкс * Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ содСрТимоС массива, Ρ€Π°Π·Π±ΠΈΡ‚ΠΎΠ΅ Π½Π° ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ слова, Ρ‚ΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ индСкс @ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ‚Ρ€ΠΈ «слова», ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ «истинному» содСрТимому массива.

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ числа элСмСнтов Π² массивС

ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ число элСмСнтов Π² массивС, Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΊΠ°ΠΊ Π΄Π»ΠΈΠ½Ρƒ строки, ΠΌΠΎΠΆΠ½ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° подстановки ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ². НапримСр:

[[email protected] ~]$ a[100]=foo

[[email protected] ~]$ echo ${#a[@]} # число элСмСнтов Π² массивС

1

[[email protected] ~]$ echo ${#a[100]} # Π΄Π»ΠΈΠ½Π° элСмСнта с индСксом 100

3

ΠœΡ‹ создали массив a ΠΈ записали строку foo Π² элСмСнт с индСксом 100. Π”Π°Π»Π΅Π΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° подстановки ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΌΡ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ»ΠΈ Π΄Π»ΠΈΠ½Ρƒ массива, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΏΡ€ΠΈ этом Ρ„ΠΎΡ€ΠΌΡƒ записи индСкса @. Π—Π°Ρ‚Π΅ΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ»ΠΈ Π΄Π»ΠΈΠ½Ρƒ элСмСнта с индСксом 100, содСрТащСго строку foo. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π΄Π°ΠΆΠ΅ ΠΏΡ€ΠΈ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ присвоили строку элСмСнту с индСксом 100, bash сообщаСт, Ρ‡Ρ‚ΠΎ Π² массивС имССтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ элСмСнт. Π’Π°ΠΊΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π½Π΅ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ для Ρ‚Π΅Ρ… языков, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ элСмСнты массива (элСмСнты с индСксами 0–99) Π±Ρ‹Π»ΠΈ Π±Ρ‹ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ пустыми значСниями ΠΈ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Π»ΠΈΡΡŒ Π±Ρ‹ ΠΏΡ€ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° массива.

Поиск ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… индСксов

Π’Π°ΠΊ ΠΊΠ°ΠΊ bash позволяСт ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Ρ€Π°Π·Ρ€Π΅ΠΆΠ΅Π½Π½Ρ‹Π΅ массивы ΠΏΡƒΡ‚Π΅ΠΌ присваивания Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌ элСмСнтам, ΠΈΠ½ΠΎΠ³Π΄Π° трСбуСтся ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊΠΈΠ΅ элСмСнты Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° подстановки ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅:

${!массив[*]}

${!массив[@]}

Π³Π΄Π΅ массив β€” это имя ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ-массива. Как ΠΈ Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… случаях использования * ΠΈ @ Π² опСрациях подстановки, Ρ„ΠΎΡ€ΠΌΠ° @, Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Π°Ρ Π² ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ, оказываСтся Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ выполняСт подстановку Π½Π΅Ρ€Π°Π·Π΄Ρ€ΠΎΠ±Π»Π΅Π½Π½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ элСмСнтов:

[[email protected] ~]$ foo=([2]=a [4]=b [6]=c)

[[email protected] ~]$ for i in "${foo[@]}"; do echo $i; done

a

b

c

[[email protected] ~]$ for i in "${!foo[@]}"; do echo $i; done

2

4

6

Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ элСмСнтов Π² ΠΊΠΎΠ½Π΅Ρ† массива

Π—Π½Π°Π½ΠΈΠ΅ количСства элСмСнтов Π² массивС Π½Π΅ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚, Ссли понадобится Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ значСния Π² ΠΊΠΎΠ½Π΅Ρ† массива, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ значСния, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹Π΅ индСксами * ΠΈ @, Π½Π΅ ΡΠΎΠΎΠ±Ρ‰Π°ΡŽΡ‚ наибольший занятый индСкс Π² массивС. К ΡΡ‡Π°ΡΡ‚ΡŒΡŽ, командная ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ° прСдоставляСт собствСнноС Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅. ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ присваивания += автоматичСски добавляСт значСния Π² ΠΊΠΎΠ½Π΅Ρ† массива. НиТС ΠΌΡ‹ записали Ρ‚Ρ€ΠΈ значСния Π² массив, Π° Π·Π°Ρ‚Π΅ΠΌ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ Π² ΠΊΠΎΠ½Π΅Ρ† Π΅Ρ‰Π΅ Ρ‚Ρ€ΠΈ.

[[email protected] ~]$ foo=(a b c)

[[email protected] ~]$ echo ${foo[@]}

a b c

[[email protected] ~]$ foo+=(d e f)

[[email protected] ~]$ echo ${foo[@]}

a b c d e f

Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ° массива

Π’Π°ΠΊ ΠΆΠ΅ ΠΊΠ°ΠΊ ΠΈ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с элСктронными Ρ‚Π°Π±Π»ΠΈΡ†Π°ΠΌΠΈ, ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с массивами часто Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ ΠΎΡ‚ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ значСния. Командная ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ° Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ прямой ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ сортировки, Π½ΠΎ Π΅Π΅ Π½Π΅Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ самому:

#!/bin/bash

# array-sort : сортировка массива

a=(f e d c b a)

echo "Original array: ${a[@]}"

a_sorted=($(for i in "${a[@]}"; do echo $i; done | sort))

echo "Sorted array:Β Β Β ${a_sorted[@]}"

Если Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ этот сцСнарий, ΠΎΠ½ Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

[[email protected] ~]$ array-sort

Original array: f e d c b a

Sorted array: a b c d e f

Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΠΉ ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅Ρ‚ содСрТимоС исходного массива (a) Π²ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΉ массив (a_sorted), выполняя Ρ‚Ρ€ΡŽΠΊ с подстановкой ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹. Π­Ρ‚ΠΎΡ‚ простой ΠΏΡ€ΠΈΠ΅ΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для выполнСния самых Ρ€Π°Π·Π½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ с массивами, просто измСняя состав ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€Π°.

УдалСниС массива

Π£Π΄Π°Π»ΠΈΡ‚ΡŒ массив ΠΌΠΎΠΆΠ½ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ unset:

[[email protected] ~]$ foo=(a b c d e f)