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

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

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

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

a b c d e f

[[email protected] ~]$ unset foo

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

[[email protected] ~]$

Командой unset ΠΌΠΎΠΆΠ½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ СдинствСнный элСмСнт массива:

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

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

a b c d e f

[[email protected] ~]$ unset 'foo[2]'

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

a b d e f

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ ΡƒΠ΄Π°Π»ΠΈΠ»ΠΈ Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ элСмСнт массива, с индСксом 2. НС Π·Π°Π±Ρ‹Π²Π°ΠΉΡ‚Π΅, Ρ‡Ρ‚ΠΎ индСксация элСмСнтов массива начинаСтся с 0, Π° Π½Π΅ с 1! ΠžΡ‚ΠΌΠ΅Ρ‚ΡŒΡ‚Π΅ Ρ‚Π°ΠΊΠΆΠ΅, Ρ‡Ρ‚ΠΎ элСмСнт массива Π½ΡƒΠΆΠ½ΠΎ Π·Π°ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π² ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ подстановку ΠΏΡƒΡ‚Π΅ΠΉ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΎΠΉ.

Π˜Π½Ρ‚Π΅Ρ€Π΅ΡΠ½ΠΎ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ присваиваниС пустого значСния массиву Π½Π΅ ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠ°Π΅Ρ‚ Π΅Π³ΠΎ содСрТимоС:

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

[[email protected] ~]$ foo=

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

b c d e f

Π›ΡŽΠ±Π°Ρ ссылка Π½Π° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ-массив Π±Π΅Π· индСкса Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ элСмСнт с индСксом 0:

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

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

a b c d e f

[[email protected] ~]$ foo=A

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

A b c d e f

Π—Π°ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ Π·Π°ΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅

Если Π½Π° страницС справочного руководства (man) для bash Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ поиск слова array, ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ мноТСство Π΅Π³ΠΎ ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π½ΠΈΠΉ, Π³Π΄Π΅ ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ ΠΏΡ€ΠΈΠ΅ΠΌΡ‹ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ-массивами. Π‘ΠΎΠ»ΡŒΡˆΠ°Ρ Ρ‡Π°ΡΡ‚ΡŒ этих описаний довольно Ρ‚ΡƒΠΌΠ°Π½Π½Π°, Π½ΠΎ ΠΈΠ½ΠΎΠ³Π΄Π° ΠΎΠ½ΠΈ содСрТат вСсьма ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Π΅ свСдСния. ЀактичСски массивы нСдостаточно ΡˆΠΈΡ€ΠΎΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Π½Π° языкС ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ, Π² основном ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Π½Ρ‹Π΅ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ для Unix (Ρ‚Π°ΠΊΠΈΠ΅, ΠΊΠ°ΠΊ sh) Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ ΠΈΡ…. Об этом нСдостаткС остаСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡΠΎΠΆΠ°Π»Π΅Ρ‚ΡŒ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ массивы ΠΎΡ‡Π΅Π½ΡŒ популярны Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… языках программирования ΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΌΠΎΡ‰Π½Ρ‹ΠΌ инструмСнтом, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΌ Ρ€Π΅ΡˆΠ°Ρ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Π·Π°Π΄Π°Ρ‡ΠΈ программирования.

ΠœΠ°ΡΡΠΈΠ²Ρ‹ ΠΈ Ρ†ΠΈΠΊΠ»Ρ‹ ΠΏΠΎ своСй ΠΏΡ€ΠΈΡ€ΠΎΠ΄Π΅ Π±Π»ΠΈΠ·ΠΊΠΈ Π΄Ρ€ΡƒΠ³ Π΄Ρ€ΡƒΠ³Ρƒ ΠΈ часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ вмСстС. НапримСр, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ Ρ„ΠΎΡ€ΠΌΠ° Ρ†ΠΈΠΊΠ»Π° Ρ…ΠΎΡ€ΠΎΡˆΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для вычислСния индСксов массива:

for ((Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅1; Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅2; Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅3))

36. Π­ΠΊΠ·ΠΎΡ‚ΠΈΠΊΠ°

Π’ этой Π³Π»Π°Π²Π΅, Π·Π°Π²Π΅Ρ€ΡˆΠ°ΡŽΡ‰Π΅ΠΉ нашС ΠΏΡƒΡ‚Π΅ΡˆΠ΅ΡΡ‚Π²ΠΈΠ΅, ΠΌΡ‹ обратимся ΠΊ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ случайным Ρ‚Π΅ΠΌΠ°ΠΌ. НСсмотря Π½Π° Ρ‚ΠΎ Ρ‡Ρ‚ΠΎ Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… Π³Π»Π°Π²Π°Ρ… ΠΌΡ‹ рассмотрСли мноТСство основных Ρ‚Π΅ΠΌ, Π½Π΅ΠΌΠ°Π»ΠΎ особСнностСй bash ΠΎΡΡ‚Π°Π»ΠΈΡΡŒ Π½Π΅ΠΎΡ…Π²Π°Ρ‡Π΅Π½Π½Ρ‹ΠΌΠΈ. МногиС ΠΈΠ· Π½ΠΈΡ… ΠΏΠ»ΠΎΡ…ΠΎ освСщСны Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ ΠΈ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ Π² основном для Ρ‚Π΅Ρ…, ΠΊΡ‚ΠΎ занимаСтся ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠ΅ΠΉ bash Π² дистрибутивы Linux. Но Π΅ΡΡ‚ΡŒ срСди Π½ΠΈΡ… ΠΈ Ρ‚Π°ΠΊΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅, хотя ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ нСчасто, ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΈΠ³ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ ΠΏΡ€ΠΈ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡ программирования. Π˜Ρ…-Ρ‚ΠΎ ΠΌΡ‹ ΠΈ рассмотрим.

Π“Ρ€ΡƒΠΏΠΏΡ‹ ΠΊΠΎΠΌΠ°Π½Π΄ ΠΈ ΠΏΠΎΠ΄ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ

bash ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΊΠΎΠΌΠ°Π½Π΄. Π’ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Сю ΠΌΠΎΠΆΠ½ΠΎ двумя способами: Π»ΠΈΠ±ΠΎ ΠΏΡƒΡ‚Π΅ΠΌ Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΊΠΎΠΌΠ°Π½Π΄, Π»ΠΈΠ±ΠΎ ΠΏΡƒΡ‚Π΅ΠΌ примСнСния ΠΏΠΎΠ΄Β­ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ. НиТС приводятся ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ синтаксиса ΠΎΠ±ΠΎΠΈΡ… ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΎΠ².

Π“Ρ€ΡƒΠΏΠΏΠ° ΠΊΠΎΠΌΠ°Π½Π΄:

{ ΠΊΠΎΠΌΠ°Π½Π΄Π°1; ΠΊΠΎΠΌΠ°Π½Π΄Π°2; [ΠΊΠΎΠΌΠ°Π½Π΄Π°3; ...] }

ΠŸΠΎΠ΄ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ°:

(ΠΊΠΎΠΌΠ°Π½Π΄Π°1; ΠΊΠΎΠΌΠ°Π½Π΄Π°2; [ΠΊΠΎΠΌΠ°Π½Π΄Π°3;...])

Π“Ρ€ΡƒΠΏΠΏΠ° ΠΊΠΎΠΌΠ°Π½Π΄ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Π΅ скобки, Π° ΠΏΠΎΠ΄ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ° оформляСтся ΠΊΡ€ΡƒΠ³Π»Ρ‹ΠΌΠΈ скобками. Π’ΠΎΡ‚ ΠΈ вся Ρ€Π°Π·Π½ΠΈΡ†Π°. Однако ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΠΈΠ·-Π·Π° особСнностСй Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΊΠΎΠΌΠ°Π½Π΄ Π² bash Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Π΅ скобки Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΎΡ‚Π΄Π΅Π»ΡΡ‚ΡŒΡΡ ΠΎΡ‚ ΠΊΠΎΠΌΠ°Π½Π΄ ΠΏΡ€ΠΎΠ±Π΅Π»Π°ΠΌΠΈ ΠΈ послСдняя ΠΊΠΎΠΌΠ°Π½Π΄Π° Π΄ΠΎΠ»ΠΆΠ½Π° Π·Π°Π²Π΅Ρ€ΡˆΠ°Ρ‚ΡŒΡΡ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ с запятой ΠΈΠ»ΠΈ символом ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° строки.

ΠŸΠ΅Ρ€Π΅Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅

Π˜Ρ‚Π°ΠΊ, Π³Π΄Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΈΠ³ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π³Ρ€ΡƒΠΏΠΏΡ‹ ΠΊΠΎΠΌΠ°Π½Π΄ ΠΈ ΠΏΠΎΠ΄ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ? Π”Π°ΠΆΠ΅ ΠΏΡ€ΠΈ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ ΠΈΠΌΠ΅ΡŽΡ‚ΡΡ Π²Π°ΠΆΠ½Ρ‹Π΅ различия (ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ раскрыты Π΄Π°Π»Π΅Π΅), ΠΈ Ρ‚Π΅ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π² основном для пСрСнаправлСния. Рассмотрим Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ сцСнария, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΠΉ ΠΏΠ΅Ρ€Π΅Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π²Ρ‹Π²ΠΎΠ΄Π° мноТСства ΠΊΠΎΠΌΠ°Π½Π΄:

ls -l > output.txt

echo "Listing of foo.txt" >> output.txt

cat foo.txt >> output.txt

Выглядит достаточно просто: Π²Ρ‹Π²ΠΎΠ΄ Ρ‚Ρ€Π΅Ρ… ΠΊΠΎΠΌΠ°Π½Π΄ пСрСнаправляСтся Π² Ρ„Π°ΠΉΠ» с ΠΈΠΌΠ΅Π½Π΅ΠΌ output.txt. Π’ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π²ΡˆΠΈΡΡŒ ΠΏΡ€ΠΈΠ΅ΠΌΠΎΠΌ Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΊΠΈ, Ρ‚ΠΎ ΠΆΠ΅ самоС ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Ρ€Π°Π·ΠΈΡ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ ΠΊΡ€Π°Ρ‚ΠΊΠΎ:

{ ls -l; echo "Listing of foo.txt"; cat foo.txt; } > output.txt

ΠŸΠΎΠ΄ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ:

(ls -l; echo "Listing of foo.txt"; cat foo.txt) > output.txt

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

{ ls -l; echo "Listing of foo.txt"; cat foo.txt; } | lpr

Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ объСдинили Π²Ρ‹Π²ΠΎΠ΄ Ρ‚Ρ€Π΅Ρ… ΠΊΠΎΠΌΠ°Π½Π΄ ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Π»ΠΈ Π΅Π³ΠΎ ΠΏΠΎ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€Ρƒ Π½Π° Π²Ρ…ΠΎΠ΄ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ lpr, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΠΏΠ΅Ρ‡Π°Ρ‚Π°Ρ‚ΡŒ ΠΎΡ‚Ρ‡Π΅Ρ‚.

ΠŸΠΎΠ΄ΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° процСссов

НСсмотря Π½Π° внСшнСС сходство ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ объСдинСния ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² для ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ пСрСнаправлСния, ΠΌΠ΅ΠΆΠ΄Ρƒ Π³Ρ€ΡƒΠΏΠΏΠ°ΠΌΠΈ ΠΊΠΎΠΌΠ°Π½Π΄ ΠΈ ΠΏΠΎΠ΄ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ°ΠΌΠΈ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Π²Π°ΠΆΠ½Ρ‹Π΅ отличия. ВсС ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, входящиС Π² Π³Ρ€ΡƒΠΏΠΏΡƒ, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ΅, ΠΏΠΎΠ΄ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ° (ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ³Π°Π΄Π°Ρ‚ΡŒΡΡ ΠΈΠ· названия) выполняСт свои ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π² Π΄ΠΎΡ‡Π΅Ρ€Π½Π΅ΠΉ ΠΊΠΎΠΏΠΈΠΈ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚ запуска ΠΏΠΎΠ΄ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ создаСтся копия Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ ΠΈ пСрСдаСтся Π½ΠΎΠ²ΠΎΠΌΡƒ экзСмпляру ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ. Когда ΠΏΠΎΠ΄ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ° Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ, Π΅Π΅ копия окруТСния уничтоТаСтся, соотвСтствСнно Ρ‚Π΅Ρ€ΡΡŽΡ‚ΡΡ Π»ΡŽΠ±Ρ‹Π΅ измСнСния Π² ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠΈ ΠΏΠΎΠ΄ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ (Π²ΠΊΠ»ΡŽΡ‡Π°Ρ значСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…).

ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Ссли Π½Π΅Ρ‚ прямой нСобходимости Π² использовании ΠΏΠΎΠ΄ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ, ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»ΡŒΠ½Π΅Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π³Ρ€ΡƒΠΏΠΏΡ‹ ΠΊΠΎΠΌΠ°Π½Π΄. Π“Ρ€ΡƒΠΏΠΏΡ‹ ΠΊΠΎΠΌΠ°Π½Π΄ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ быстрСС ΠΈ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ мСньшС памяти.

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

echo "foo" | read

echo $REPLY

послС выполнСния ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ пСрСмСнная REPLY всСгда ΠΎΡΡ‚Π°Π²Π°Π»Π°ΡΡŒ пустой, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π° read выполняСтся Π² ΠΏΠΎΠ΄ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ΅ ΠΈ Π΅Π΅ копия REPLY уничтоТаСтся ΠΏΠΎ Π΅Π΅ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠΈ.

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

ΠŸΠΎΠ΄ΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° процСссов оформляСтся двумя способами: для процСссов, ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΡ… Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ Π² стандартный Π²Ρ‹Π²ΠΎΠ΄:

<(список)

ΠΈ для процСссов, ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‰ΠΈΡ… Π΄Π°Π½Π½Ρ‹Π΅ Ρ‡Π΅Ρ€Π΅Π· стандартный Π²Π²ΠΎΠ΄:

>(список)

Π³Π΄Π΅ список β€” это список ΠΊΠΎΠΌΠ°Π½Π΄.

НиТС ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ, ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ подстановку процСссов для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ read:

read < <(echo "foo")

echo $REPLY

ΠŸΠΎΠ΄ΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° процСссов позволяСт ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π²Ρ‹Π²ΠΎΠ΄ ΠΏΠΎΠ΄ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ ΠΊΠ°ΠΊ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» ΠΈ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡ‚ΡŒ Π΅Π³ΠΎ ΠΏΠ΅Ρ€Π΅Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅. Π’Π°ΠΊ ΠΊΠ°ΠΊ это Ρ„ΠΎΡ€ΠΌΠ° подстановки, всСгда ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ·Π½Π°Ρ‚ΡŒ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ подставляСмоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅:

[[email protected] ~]$ echo <(echo "foo")

/dev/fd/63

Π’Ρ‹Π²ΠΎΠ΄ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° подстановки ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ echo ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π²Ρ‹Π²ΠΎΠ΄ ΠΏΠΎΠ΄ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ пСрСдаСтся Ρ‡Π΅Ρ€Π΅Π· Ρ„Π°ΠΉΠ» с ΠΈΠΌΠ΅Π½Π΅ΠΌ /dev/fd/63.

ΠŸΠΎΠ΄ΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° процСссов часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² Ρ†ΠΈΠΊΠ»Π°Ρ…, содСрТащих ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ read. НиТС приводится ΠΏΡ€ΠΈΠΌΠ΅Ρ€ использования read Π² Ρ†ΠΈΠΊΠ»Π΅, ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΌ список Ρ„Π°ΠΉΠ»ΠΎΠ² Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅, созданном ΠΏΠΎΠ΄ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΎΠΉ:

#!/bin/bash

# pro-sub : дСмонстрация подстановки процСссов

while read attr links owner group size date time filename; do

Β Β Β Β Β Β Β Β cat <<- EOF

Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Filename:Β Β Β $filename

Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Size:Β Β Β Β Β Β Β $size

Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Owner:Β Β Β Β Β Β $owner

Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Group:Β Β Β Β Β Β $group