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

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

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

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ $* ΠΈ [email protected], Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… случаях, ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΡ€Π΅Ρ‡ΠΈΠ²ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ! Π­Ρ‚ΠΎ зависит ΠΎΡ‚ содСрТимого ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ $IFS.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 9-7. ΠŸΡ€ΠΎΡ‚ΠΈΠ²ΠΎΡ€Π΅Ρ‡ΠΈΡ Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… $* ΠΈ [email protected]

#!/bin/bash


# ДСмонстрация противорСчивости содСрТимого Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΡ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… "$*" ΠΈ " [email protected]",

#+ которая проявляСтся ΠΏΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ порядка Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Π² ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ.

# ДСмонстрация противорСчивости, ΠΏΡ€ΠΎΡΠ²Π»ΡΡŽΡ‰Π΅ΠΉΡΡ ΠΏΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ

#+ содСрТимого ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ IFS.


set -- "ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ ΠΎΠ΄ΠΈΠ½" "Π²Ρ‚ΠΎΡ€ΠΎΠΉ" "Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ:ΠΎΠ΄ΠΈΠ½" "" "ΠŸΡΡ‚Ρ‹ΠΉ: :ΠΎΠ΄ΠΈΠ½"

# Установка Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² $1, $2, ΠΈ Ρ‚.Π΄.


echo


echo 'IFS ΠΏΠΎ-ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, пСрСмСнная "$*"'

c=0

for i in "$*" # Π² ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠ°Ρ…

do echo "$((c+=1)): [$i]" # Π­Ρ‚Π° строка остаСтся Π±Π΅Π· ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π²ΠΎ всСх Ρ†ΠΈΠΊΠ»Π°Ρ….

# Π’Ρ‹Π²ΠΎΠ΄ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ².

done

echo ---


echo 'IFS ΠΏΠΎ-ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, пСрСмСнная $*'

c=0

for i in $* # Π±Π΅Π· ΠΊΠ°Π²Ρ‹Ρ‡Π΅ΠΊ

do echo "$((c+=1)): [$i]"

done

echo ---


echo 'IFS ΠΏΠΎ-ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, пСрСмСнная " [email protected]"'

c=0

for i in " [email protected]"

do echo "$((c+=1)): [$i]"

done

echo ---


echo 'IFS ΠΏΠΎ-ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, пСрСмСнная [email protected]'

c=0

for i in [email protected]

do echo "$((c+=1)): [$i]"

done

echo ---


IFS=:

echo 'IFS=":", пСрСмСнная "$*"'

c=0

for i in "$*"

do echo "$((c+=1)): [$i]"

done

echo ---


echo 'IFS=":", пСрСмСнная $*'

c=0

for i in $*

do echo "$((c+=1)): [$i]"

done

echo ---


var=$*

echo 'IFS=":", пСрСмСнная "$var" (var=$*)'

c=0

for i in "$var"

do echo "$((c+=1)): [$i]"

done

echo ---


echo 'IFS=":", пСрСмСнная $var (var=$*)'

c=0

for i in $var

do echo "$((c+=1)): [$i]"

done

echo ---


var="$*"

echo 'IFS=":", пСрСмСнная $var (var="$*")'

c=0

for i in $var

do echo "$((c+=1)): [$i]"

done

echo ---


echo 'IFS=":", пСрСмСнная "$var" (var="$*")'

c=0

for i in "$var"

do echo "$((c+=1)): [$i]"

done

echo ---


echo 'IFS=":", пСрСмСнная " [email protected]"'

c=0

for i in " [email protected]"

do echo "$((c+=1)): [$i]"

done

echo ---


echo 'IFS=":", пСрСмСнная [email protected]'

c=0

for i in [email protected]

do echo "$((c+=1)): [$i]"

done

echo ---


[email protected]

echo 'IFS=":", пСрСмСнная $var ( [email protected])'

c=0

for i in $var

do echo "$((c+=1)): [$i]"

done

echo ---


echo 'IFS=":", пСрСмСнная "$var" ( [email protected])'

c=0

for i in "$var"

do echo "$((c+=1)): [$i]"

done

echo ---


var=" [email protected]"

echo 'IFS=":", пСрСмСнная "$var" (var=" [email protected]")'

c=0

for i in "$var"

do echo "$((c+=1)): [$i]"

done

echo ---


echo 'IFS=":", пСрСмСнная $var (var=" [email protected]")'

c=0

for i in $var

do echo "$((c+=1)): [$i]"

done


echo


# ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ этот сцСнарий ΠΏΠΎΠ΄ ksh ΠΈΠ»ΠΈ zsh -y.


exit 0


# Π­Ρ‚ΠΎ сцСнарий написан Stephane Chazelas,

# ΠΠ΅Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ измСнСния внСсСны Π°Π²Ρ‚ΠΎΡ€ΠΎΠΌ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°.

Различия ΠΌΠ΅ΠΆΠ΄Ρƒ [email protected] ΠΈ $* Π½Π°Π±Π»ΡŽΠ΄Π°ΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ΠΈ ΠΏΠΎΠΌΠ΅Ρ‰Π°ΡŽΡ‚ΡΡ Π² Π΄Π²ΠΎΠΉΠ½Ρ‹Π΅ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 9-8. Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΠΌΠΎΠ΅ $* ΠΈ [email protected], ΠΊΠΎΠ³Π΄Π° пСрСмСнная $IFS -- пуста

#!/bin/bash


# Если пСрСмСнная $IFS ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π° "пустым" Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ,

# Ρ‚ΠΎ "$*" ΠΈ " [email protected]" содСрТат Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ Π½Π΅ Π² Ρ‚ΠΎΠΌ Π²ΠΈΠ΄Π΅, Π² ΠΊΠ°ΠΊΠΎΠΌ оТидаСтся.


mecho () # Π’Ρ‹Π²ΠΎΠ΄ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ².

{

echo "$1,$2,$3";

}


IFS="" # Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ "пустым" Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ.

set a b c # Установка Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ².


mecho "$*" # abc,,

mecho $* # a,b,c


mecho [email protected] # a,b,c

mecho " [email protected]" # a,b,c


# ПовСдСниС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… $* ΠΈ [email protected], ΠΏΡ€ΠΈ "пустой" $IFS, зависит

# ΠΎΡ‚ вСрсии ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ, Bash ΠΈΠ»ΠΈ sh.

# ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ, Π±Ρ‹Π»ΠΎ Π±Ρ‹ Π½Π΅Ρ€Π°Π·ΡƒΠΌΠ½Ρ‹ΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ этой "Ρ„ΠΈΡ‡Π΅ΠΉ" Π² своих сцСнариях.


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


exit 0

ΠŸΡ€ΠΎΡ‡ΠΈΠ΅ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅

$-

Бписок Ρ„Π»Π°Π³ΠΎΠ², ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½Ρ‹Ρ… ΡΡ†Π΅Π½Π°Ρ€ΠΈΡŽ (ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ set). Π‘ΠΌ. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 11-13.

Π­Ρ‚Π° конструкция ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ Π±Ρ‹Π»Π° Π²Π²Π΅Π΄Π΅Π½Π° Π² ksh, ΠΎΡ‚ΠΊΡƒΠ΄Π° ΠΏΠ΅Ρ€Π΅ΠΊΠΎΡ‡Π΅Π²Π°Π»Π° Π² Bash ΠΈ, ΠΏΠΎΡ…ΠΎΠΆΠ΅, Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π² Bash Π½Π΅ совсСм Π½Π°Π΄Π΅ΠΆΠ½ΠΎ. ЕдинствСнноС Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ -- ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° - Π·Π°ΠΏΡƒΡ‰Π΅Π½ Π»ΠΈ сцСнарий Π² ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅.

$!

PID послСднСго, Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½ΠΎΠ³ΠΎ Π² Ρ„ΠΎΠ½Π΅, процСсса

LOG=$0.log


COMMAND1="sleep 100"


echo "Π—Π°ΠΏΠΈΡΡŒ Π² Π»ΠΎΠ³ всСх PID Ρ„ΠΎΠ½ΠΎΠ²Ρ‹Ρ… процСссов, Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½Ρ‹Ρ… ΠΈΠ· сцСнария: $0" >> "$LOG"

# Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ процСссов ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ нСобходимости.

echo >> "$LOG"


# ΠšΠΎΠΌΠ°Π½Π΄Ρ‹ записи Π² Π»ΠΎΠ³.


echo -n "PID of \"$COMMAND1\": " >> "$LOG"

${COMMAND1} &

echo $! >> "$LOG"

# PID процСсса "sleep 100": 1506


# Бпасибо Jacques Lederer Π·Π° ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€.


$_

Π‘ΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Π°Ρ пСрСмСнная, содСрТит послСдний Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 9-9. ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ "ΠΏΠΎΠ΄Ρ‡Π΅Ρ€ΠΊΠΈΠ²Π°Π½ΠΈΠ΅"

#!/bin/bash


echo $_ # /bin/bash

# Для запуска сцСнария Π±Ρ‹Π» Π²Ρ‹Π·Π²Π°Π½ /bin/bash.


du >/dev/null # ПодавлСниС Π²Ρ‹Π²ΠΎΠ΄Π°.

echo $_ # du


ls -al >/dev/null # ПодавлСниС Π²Ρ‹Π²ΠΎΠ΄Π°.

echo $_ # -al (послСдний Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚)


:

echo $_ # :

$?

Код Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠ»ΠΈ скрипта (см. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 22-3)

$$

PID самого процСсса-сцСнария. ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ $$ часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΡ€ΠΈ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ "ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ…" ΠΈΠΌΠ΅Π½ для Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² (см. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ A-14, ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 29-6, ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 12-23 ΠΈ ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 11-23). ΠžΠ±Ρ‹Ρ‡Π½ΠΎ это ΠΏΡ€ΠΎΡ‰Π΅ Ρ‡Π΅ΠΌ Π²Ρ‹Π·ΠΎΠ² mktemp.

9.2. Π Π°Π±ΠΎΡ‚Π° со строками

Bash ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π½Π° ΡƒΠ΄ΠΈΠ²Π»Π΅Π½ΠΈΠ΅ большоС количСство ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π½Π°Π΄ строками. К соТалСнию, этот Ρ€Π°Π·Π΄Π΅Π» Bash испытываСт нСдостаток ΡƒΠ½ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ. Одни ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ подмноТСством ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ подстановки ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², Π° Π΄Ρ€ΡƒΠ³ΠΈΠ΅ -- ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‚ с Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ UNIX -- expr. Π­Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ противорСчиям Π² синтаксисС ΠΊΠΎΠΌΠ°Π½Π΄ ΠΈ ΠΏΠ΅Ρ€Π΅ΠΊΡ€Ρ‹Ρ‚ΠΈΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… возмоТностСй, Π½Π΅ говоря ΡƒΠΆΠ΅ ΠΎ Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‰Π΅ΠΉ ΠΏΡƒΡ‚Π°Π½ΠΈΡ†Π΅.

Π”Π»ΠΈΠ½Π° строки

${#string}

expr length $string

expr "$string" : '.*'

stringZ=abcABC123ABCabc


echo ${#stringZ} # 15

echo `expr length $stringZ` # 15

echo `expr "$stringZ" : '.*'` # 15


ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 9-10. Вставка пустых строк ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠ°Ρ€Π°Π³Ρ€Π°Ρ„Π°ΠΌΠΈ Π² тСкстовом Ρ„Π°ΠΉΠ»Π΅

#!/bin/bash

# paragraph-space.sh


# Вставка пустых строк ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠ°Ρ€Π°Π³Ρ€Π°Ρ„Π°ΠΌΠΈ Π² тСкстовом Ρ„Π°ΠΉΠ»Π΅.

# ΠŸΠΎΡ€ΡΠ΄ΠΎΠΊ использования: $0 <FILENAME


MINLEN=45 # Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ потрСбуСтся ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ это Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

# Π‘Ρ‚Ρ€ΠΎΠΊΠΈ, содСрТащиС количСство символов мСньшСС, Ρ‡Π΅ΠΌ $MINLEN

#+ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‚ΡΡ Π·Π° послСднюю строку ΠΏΠ°Ρ€Π°Π³Ρ€Π°Ρ„Π°.


while read line # ΠŸΠΎΡΡ‚Ρ€ΠΎΡ‡Π½ΠΎΠ΅ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π° ΠΎΡ‚ Π½Π°Ρ‡Π°Π»Π° Π΄ΠΎ ΠΊΠΎΠ½Ρ†Π°...

do

echo "$line" # Π’Ρ‹Π²ΠΎΠ΄ строки.


len=${#line}

if [ "$len" -lt "$MINLEN" ]

then echo # Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ пустой строки послС послСднСй строки ΠΏΠ°Ρ€Π°Π³Ρ€Π°Ρ„Π°.

fi

done


exit 0

Π”Π»ΠΈΠ½Π° подстроки Π² строкС (подсчСт ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‰ΠΈΡ… символов вСдСтся с Π½Π°Ρ‡Π°Π»Π° строки)

expr match "$string" '$substring'

Π³Π΄Π΅ $substring -- рСгулярноС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅.

expr "$string" : '$substring'

Π³Π΄Π΅ $substring -- рСгулярноС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅.

stringZ=abcABC123ABCabc

# |------|


echo `expr match "$stringZ" 'abc[A-Z]*.2'` # 8

echo `expr "$stringZ" : 'abc[A-Z]*.2'` # 8


Index

expr index $string $substring

НомСр ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ совпадСния Π² $string c ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ символом Π² $substring.

stringZ=abcABC123ABCabc

echo `expr index "$stringZ" C12` # 6

# позиция символа C.