Главная » Eще немного о ZSH
Вот прочитал эту статейку и решил поделиться своими заметками.

Все ниженаписаное было написано для себя дабы служить шпаргалкой, так что не судите строго smile
Начнемс…

Если у нас есть абсолютный путь к файлу, а нам нужно вывести имя файла или каталог в котором лежит файл можно воспользоваться конструкциями «:h» и «:t»:
$ e=`ls =cat`;print "Directory " $e:h "file " $e:t
Directory /bin file cat

Отделить имя файла от расширения тоже не доставит много труда:
$ filename=(image.png document.doc test.sh)
$ print -l $filename:r
image
document
test
$ print -l $filename:e
png
doc
sh

Меняем регистр:
$ filename=$filename:u
$ print $filename
IMAGE.PNG DOCUMENT.DOC TEST.SH

$ filename=$filename:l
$ print $filename
image.png document.doc test.sh

Следующие несколько примеров нам помогут сплитить строки.
$ u="test"
$ print $u[1]
t

$ VAR="this is a big long sentence"
$ VAR[(w)5]
long
$ echo $VAR[(w)2,(w)5]
is a big long
$ echo $VAR[(w)2,15]
is a big l

меняем сепаратор
$ VAR="this/is/a/long/string"
$ print $VAR[(ws./.)4]
long

Заменить набор символов в строке можно следующим образом:
$ VAR=`pwd`
$ print $VAR
/usr/share/doc
$ print ${(s./.)VAR}
usr share doc
$ print ${VAR:gs./.:.}
:usr:share:doc
или
$ print ${VAR:gs:/:.:}
.usr.share.doc

Если у нас в переменной находится многострочный текст, то вывести определенную строку можно как то так:
$ VAR=`head /etc/passwd`
$ print $VAR[(f)1]
root:x:0:0:root:/root:/bin/zsh

Некоторые полезные, для скриптов, конструкции(крайне полезно, когда нужно задать дефолтное значение):
${+VAR} #если переменная VAR существует возвращается 1 иначе 0
$ VAR=""
$ print ${+VAR}
1
$ print ${+AR}
0

${VAR:-word} #Если переменная VAR существует и не равна "" то возвращается она же, иначе возвращается word.
$ print ${AR:-word}
word
$ print ${VAR:-word}
word
$ VAR="hello"
$ print ${VAR:-word}
hello

${VAR:+word} #Если переменная VAR существует и не равна "" то возвращается word, иначе ничего
$ VAR="test"
$ print ${VAR:+word}
word

${name#pattern}
${name##pattern} #Незнаю в чем различие но эФфект следующий: возвращается окончание строки за исключением начала которое совпадает с pattern:
$ VAR="hello world"
$ print ${VAR#hell}
o world

${name%pattern}
${name%%pattern} #тоже самое только возвращает начало
$ print ${VAR%%world}
hello
$ print ${VAR%%ll*d}
he

Также стоит обратить особое внимание на typeset. Я пока что обратил внимание на «typeset -A variable» это позволит превратить нашу переменную variable в подобие словаря. Например:
$ typeset -A VAR
$ VAR=(1 test 5 pass 3 help 7 hello)
$ print $VAR[5]
pass
$ print $VAR[3]
help

если явно не указывать тип то присвоив таким образом значение переменной мы получим список:
$ VAR=(1 test 5 pass 3 help 7 hello)
$ print $VAR[4]
pass

если же мы значения запишем в кавычках то получим простую строку:
$ VAR='1 test 5 pass 3 help 7 hello'
$ print $VAR[4]
e

Вот пожалуй и все. Более глубокое освоение осложняется плохим знанием(а лучше сказать незнанием) английского языка :(.

Категория: Linux | Просмотров: 388