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

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

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

exit 0

Бкобочная нотация ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹Ρ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Π΄Π°Π΅Ρ‚ довольно простой способ обращСния ΠΊ послСднСму Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρƒ, ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½ΠΎΠΌΡƒ Π² сцСнарий ΠΈΠ· ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки. Π’Π°ΠΊΠΎΠΉ способ ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅Ρ‚ использованиС косвСнной адрСсации.

args=$# # ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½Ρ‹Ρ… Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ².

lastarg=${!args} # ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: lastarg=${!$#} Π½Π΅ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΠΎ.


Π’ сцСнарии ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΡƒΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ развития событий, Π² зависимости ΠΎΡ‚ ΠΈΠΌΠ΅Π½ΠΈ сцСнария. Для этого сцСнарий Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡ€ΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ $0 -- имя Ρ„Π°ΠΉΠ»Π° сцСнария. Π­Ρ‚ΠΎ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈ ΠΈΠΌΠ΅Π½Π° символичСских ссылок Π½Π° Ρ„Π°ΠΉΠ» сцСнария.

Если сцСнарий ΠΎΠΆΠΈΠ΄Π°Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строкС, Ρ‚ΠΎ ΠΏΡ€ΠΈ ΠΈΡ… отсутствии ΠΎΠ½ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ "пустыС" ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ Π½Π΅ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠΎΠ±ΠΎΡ‡Π½Ρ‹ΠΉ эффСкт. Один ΠΈΠ· способов Π±ΠΎΡ€ΡŒΠ±Ρ‹ с ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΌΠΈ ошибками -- Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ символ Π² ΠΎΠ±Π΅ΠΈΡ… частях ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ присваивания, Π³Π΄Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки.

variable1_=$1_

# Π­Ρ‚ΠΎ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‚ΠΈΡ‚ появлСниС ошибок, Π΄Π°ΠΆΠ΅ ΠΏΡ€ΠΈ отсутствии Π²Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°.


critical_argument01=$variable1_


# Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ символы всСгда ΠΌΠΎΠΆΠ½ΠΎ "ΡƒΠ±Ρ€Π°Ρ‚ΡŒ" ΠΏΠΎΠ·Π΄Π½Π΅Π΅.

# Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ сдСлано ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Π°ΠΊ:

variable1=${variable1_/_/} # ΠŸΠΎΠ±ΠΎΡ‡Π½Ρ‹ΠΉ эффСкт Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ссли имя ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ

# $variable1_ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°Ρ‡ΠΈΠ½Π°Ρ‚ΡŒΡΡ с символа "_".

# Π—Π΄Π΅ΡΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² подстановки ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², обсуТдаСмых Π² Π“Π»Π°Π²Π΅ 9.

# ΠžΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΠΈΠ΅ шаблона Π·Π°ΠΌΠ΅Π½Ρ‹ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΡŽ.


# Π‘ΠΎΠ»Π΅Π΅ простой способ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ

#+ Π² ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ΅ наличия ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°.

if [ -z $1 ]

then

exit $POS_PARAMS_MISSING

fi

---

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 4-6. wh, whois выяснСниС ΠΈΠΌΠ΅Π½ΠΈ Π΄ΠΎΠΌΠ΅Π½Π°

#!/bin/bash


# Команда 'whois domain-name' выясняСт имя Π΄ΠΎΠΌΠ΅Π½Π° Π½Π° ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ· 3 сСрвСров:

# ripe.net, cw.net, radb.net


# РазмСститС этот скрипт ΠΏΠΎΠ΄ ΠΈΠΌΠ΅Π½Π΅ΠΌ 'wh' Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ /usr/local/bin


# Π’Ρ€Π΅Π±ΡƒΠ΅ΠΌΡ‹Π΅ символичСскиС ссылки:

# ln -s /usr/local/bin/wh /usr/local/bin/wh-ripe

# ln -s /usr/local/bin/wh /usr/local/bin/wh-cw

# ln -s /usr/local/bin/wh /usr/local/bin/wh-radb


if [ -z "$1" ]

then

echo "ΠŸΠΎΡ€ΡΠ΄ΠΎΠΊ использования: `basename $0` [domain-name]"

exit 65

fi


case `basename $0` in

# ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° ΠΈΠΌΠ΅Π½ΠΈ скрипта ΠΈ, соотвСтствСнно, ΠΈΠΌΠ΅Π½ΠΈ сСрвСра

"wh" ) whois [email protected];;

"wh-ripe") whois [email protected];;

"wh-radb") whois [email protected];;

"wh-cw" ) whois [email protected];;

* ) echo "ΠŸΠΎΡ€ΡΠ΄ΠΎΠΊ использования: `basename $0` [domain-name]";;

esac


exit 0

---

Команда shift "сдвигаСт" ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹, Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Ρ‡Π΅Π³ΠΎ ΠΏΠ°Ρ€ΠΌΠ΅Ρ‚Ρ€Ρ‹ "ΡΠ΄Π²ΠΈΠ³Π°ΡŽΡ‚ΡΡ" Π½Π° ΠΎΠ΄Π½Ρƒ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ Π²Π»Π΅Π²ΠΎ.

$1 <--- $2, $2 <--- $3, $3 <--- $4, ΠΈ Ρ‚.Π΄.

ΠŸΡ€Π΅ΠΆΠ½ΠΈΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ $1 тСряСтся, Π½ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ $0 (имя Ρ„Π°ΠΉΠ»Π° сцСнария) остаСтся Π±Π΅Π· ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ. Если Π²Π°ΡˆΠ΅ΠΌΡƒ ΡΡ†Π΅Π½Π°Ρ€ΠΈΡŽ пСрСдаСтся большоС количСство Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ², Ρ‚ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π° shift ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Π²Π°ΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌ, с порядковым Π½ΠΎΠΌΠ΅Ρ€ΠΎΠΌ большС 9, Π±Π΅Π· использования {Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Ρ… скобок}.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 4-7. ИспользованиС ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ shift

#!/bin/bash

# ИспользованиС ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ 'shift' с Ρ†Π΅Π»ΡŒΡŽ ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€Π° всСх Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки.


# НазовитС Ρ„Π°ΠΉΠ» с этим сцСнариСм, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ "shft",

#+ ΠΈ Π²Ρ‹Π·ΠΎΠ²ΠΈΡ‚Π΅ Π΅Π³ΠΎ с Π½Π°Π±ΠΎΡ€ΠΎΠΌ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ², Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

# ./shft a b c def 23 skidoo


until [ -z "$1" ] # Π”ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€ ΠΏΠΎΠΊΠ° Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Π½Ρ‹ всС Π²Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹...

do

echo -n "$1 "

shift

done


echo # Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ пустая строка.


exit 0

Команда shift ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ ΠΈ ΠΊ Π²Ρ…ΠΎΠ΄Π½Ρ‹ΠΌ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. Π‘ΠΌ. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 33-10.


Π“Π»Π°Π²Π° 5. ΠšΠ°Π²Ρ‹Ρ‡ΠΊΠΈ

ΠšΠ°Π²Ρ‹Ρ‡ΠΊΠΈ, ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°ΡŽΡ‰ΠΈΠ΅ строки с ΠΎΠ±Π΅ΠΈΡ… сторон, слуТат для прСдотвращСния ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ†ΠΈΠΈ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… символов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π² строкС. (Π‘ΠΈΠΌΠ²ΠΎΠ» называСтся "ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΌ", Ссли ΠΎΠ½ нСсСт Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΡΠΌΡ‹ΡΠ»ΠΎΠ²ΡƒΡŽ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ символ шаблона -- *.)

bash$ ls -l [Vv]*

-rw-rw-r-- 1 bozo bozo 324 Apr 2 15:05 VIEWDATA.BAT

-rw-rw-r-- 1 bozo bozo 507 May 4 14:25 vartrace.sh

-rw-rw-r-- 1 bozo bozo 539 Apr 14 17:11 viewdata.sh


bash$ ls -l '[Vv]*'

ls: [Vv]*: No such file or directory


НСкоторыС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ с Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ, содСрТащими ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ символы, поэтому ΠΎΡ‡Π΅Π½ΡŒ Π²Π°ΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ†ΠΈΡŽ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΡ‹Ρ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΎΠΉ, позволяя ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ.

bash$ grep '[Пп]Срвая' *.txt

file1.txt:Π­Ρ‚ΠΎ пСрвая строка Π² file1.txt.

file2.txt:Π­Ρ‚ΠΎ ΠŸΠ΅Ρ€Π²Π°Ρ строка Π² file2.txt.


ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Ρ‡Ρ‚ΠΎ "Π½Π΅ ΠΎΠΊΠ°Π²Ρ‹Ρ‡Π΅Π½Π½Ρ‹ΠΉ" Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ grep [Пп]Срвая *.txt Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΠΈΡΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Π² Bash, Π½ΠΎ Π½Π΅ Π² tcsh.

Π’ΠΎΠΎΠ±Ρ‰Π΅, ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π²ΠΎΠΉΠ½Ρ‹Π΅ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ (" ") ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΈ ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ. Π­Ρ‚ΠΎ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‚ΠΈΡ‚ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ†ΠΈΡŽ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… символов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒΡΡ Π² ΠΈΠΌΠ΅Π½Π°Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ $, ` (обратная ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠ°) ΠΈ \ (escape -- ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ слэш)[ 14 ]. Π’ΠΎ, Ρ‡Ρ‚ΠΎ символ $ ΠΏΠΎΠΏΠ°Π» Π² разряд ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ, позволяСт Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ Π²Π½ΡƒΡ‚Ρ€ΠΈ строк, ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹Ρ… Π΄Π²ΠΎΠΉΠ½Ρ‹ΠΌΠΈ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠ°ΠΌΠΈ ("$variable"), Ρ‚.Π΅. Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ подстановку Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… (см. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 4-1, Π²Ρ‹ΡˆΠ΅).

Π”Π²ΠΎΠΉΠ½Ρ‹Π΅ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Ρ‹ для прСдотвращСния разбиСния строки Π½Π° слова[ 15 ]. Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ строки Π² ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° пСрСдаСтся ΠΊΠ°ΠΊ ΠΎΠ΄ΠΈΠ½ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚, Π΄Π°ΠΆΠ΅ Ссли ΠΎΠ½Π° содСрТит ΠΏΡ€ΠΎΠ±Π΅Π»ΡŒΠ½Ρ‹Π΅ символы - Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΠΈ.

variable1="a variable containing five words"

COMMAND This is $variable1 # ИсполнСниС COMMAND с 7 Π²Ρ…ΠΎΠ΄Π½Ρ‹ΠΌΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ:

# "This" "is" "a" "variable" "containing" "five" "words"


COMMAND "This is $variable1" # ИсполнСниС COMMAND с ΠΎΠ΄Π½ΠΈΠΌ Π²Ρ…ΠΎΠ΄Π½Ρ‹ΠΌ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ:

# "This is a variable containing five words"


variable2="" # ΠŸΡƒΡΡ‚Π°Ρ пСрСмСнная.


COMMAND $variable2 $variable2 $variable2 # ИсполнСниС COMMAND Π±Π΅Π· Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ².

COMMAND "$variable2" "$variable2" "$variable2" # ИсполнСниС COMMAND с 3 "пустыми" Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ.

COMMAND "$variable2 $variable2 $variable2" # ИсполнСниС COMMAND с 1 Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ (ΠΈ 2 ΠΏΡ€ΠΎΠ±Π΅Π»Π°ΠΌΠΈ).


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


Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π² ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ echo Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ‚ΠΎΠΌ случаС, ΠΊΠΎΠ³Π΄Π° Ρ€Π°Π·Π±ΠΈΠ΅Π½ΠΈΠ΅ Π½Π° ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ слова сопряТСно с ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌΠΈ трудностями.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 5-1. Π’Ρ‹Π²ΠΎΠ΄ "ΠΏΡ€ΠΈΡ‡ΡƒΠ΄Π»ΠΈΠ²Ρ‹Ρ…" ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…

#!/bin/bash

# weirdvars.sh: Π’Ρ‹Π²ΠΎΠ΄ "ΠΏΡ€ΠΈΡ‡ΡƒΠ΄Π»ΠΈΠ²Ρ‹Ρ…" ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…


var="'(]\\{}\$\""

echo $var # '(]\{}$"

echo "$var" # '(]\{}$" Никаких Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠΉ.


echo


IFS='\'

echo $var # '(] {}$" \ символ-Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ Π² ΠΏΡ€ΠΎΠ±Π΅Π».

echo "$var" # '(]\{}$"


# ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Π²Ρ‹ΡˆΠ΅ прСдоставлСны S.C.


exit 0

ΠžΠ΄ΠΈΠ½ΠΎΡ‡Π½Ρ‹Π΅ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ (' ') схоТи ΠΏΠΎ своСму Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡŽ с Π΄Π²ΠΎΠΉΠ½Ρ‹ΠΌΠΈ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠ°ΠΌΠΈ, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π΅ Π΄ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‚ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ символ "$" Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΎΠ΄ΠΈΠ½Π°Ρ€Π½Ρ‹Ρ… ΠΊΠ°Π²Ρ‹Ρ‡Π΅ΠΊ воспринимаСтся ΠΊΠ°ΠΊ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ символ. Π’Π½ΡƒΡ‚Ρ€ΠΈ ΠΎΠ΄ΠΈΠ½ΠΎΡ‡Π½Ρ‹Ρ… ΠΊΠ°Π²Ρ‹Ρ‡Π΅ΠΊ, любой ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ символ, Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ ', интСрпрСтируСтся ΠΊΠ°ΠΊ простой символ. ΠžΠ΄ΠΈΠ½ΠΎΡ‡Π½Ρ‹Π΅ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ ("строгиС, ΠΈΠ»ΠΈ ΠΏΠΎΠ»Π½Ρ‹Π΅ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ") слСдуСт Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ Π±ΠΎΠ»Π΅Π΅ строгий Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Ρ‡Π΅ΠΌ Π΄Π²ΠΎΠΉΠ½Ρ‹Π΅ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ ("нСстрогиС, ΠΈΠ»ΠΈ Π½Π΅ΠΏΠΎΠ»Π½Ρ‹Π΅ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ").

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΎΠ΄ΠΈΠ½ΠΎΡ‡Π½Ρ‹Ρ… ΠΊΠ°Π²Ρ‹Ρ‡Π΅ΠΊ Π΄Π°ΠΆΠ΅ ΡΠΊΡ€Π°Π½ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ (\) символ воспринимаСтся ΠΊΠ°ΠΊ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ символ, ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° вывСсти ΠΎΠ΄ΠΈΠ½ΠΎΡ‡Π½ΡƒΡŽ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΡƒ Π²Π½ΡƒΡ‚Ρ€ΠΈ строки, ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎΠΉ ΠΎΠ΄ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΌΠΈ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠ°ΠΌΠΈ, Π½Π΅ даст ΠΆΠ΅Π»Π°Π΅ΠΌΠΎΠ³ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°.

echo "Why can't I write 's between single quotes"


echo


# ΠžΠ±Ρ…ΠΎΠ΄Π½ΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄.

echo 'Why can'\''t I write '"'"'s between single quotes'

# |-------| |----------| |-----------------------|

# Π’Ρ€ΠΈ строки, ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹Ρ… ΠΎΠ΄ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΌΠΈ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠ°ΠΌΠΈ,

# ΠΈ экранированныС ΠΎΠ΄ΠΈΠ½ΠΎΡ‡Π½Ρ‹Π΅ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ.


# ΠŸΡ€ΠΈΠΌΠ΅Ρ€ любСзно прСдоставлСн Stephane Chazelas.


Π­ΠΊΡ€Π°Π½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ -- это способ Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π² ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ ΠΎΠ΄ΠΈΠ½ΠΎΡ‡Π½ΠΎΠ³ΠΎ символа. Π­ΠΊΡ€Π°Π½ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ (escape) символ (\) сообщаСт ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Ρƒ, Ρ‡Ρ‚ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π·Π° Π½ΠΈΠΌ символ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²ΠΎΡΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒΡΡ ΠΊΠ°ΠΊ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ символ.

Π‘ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌΠΈ ΠΈ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π°ΠΌΠΈ, Ρ‚Π°ΠΊΠΈΠΌΠΈ ΠΊΠ°ΠΊ echo ΠΈ sed, ΡΠΊΡ€Π°Π½ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ символ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ для получСния ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ эффСкта - ΠΊΠΎΠ³Π΄Π° ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ символы ΠΏΡ€ΠΈ экранировании ΠΏΡ€ΠΈΠΎΠ±Ρ€Π΅Ρ‚Π°ΡŽΡ‚ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.