Все ниженаписаное было написано для себя дабы служить шпаргалкой, так что не судите строго :)
Начнемс…
Если у нас есть абсолютный путь к файлу, а нам нужно вывести имя файла или каталог в котором лежит файл можно воспользоваться конструкциями «: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
Вот пожалуй и все. Более глубокое освоение осложняется плохим знанием(а лучше сказать незнанием) английского языка :(.
Некоторые полезные ресурсы: