Команды SFK


    1        2        3        4        5        6        7        8        9        10    

Раздел 10. Help - Помощь
help chain | help chars | help colors | help compile | help nocase | help office | help options | help patterns | help select | help shell | help unicode | help var | samp |


Help:   Рус   |   Eng        Refer:   Рус   |   Eng  

Команда: help var

Как устанавливать и читать переменные в SFK-скриптах

Чтобы извлечь данные в одной команде и повторно использовать их в следующих командах

Поддержка параметров и переменных
Параметры SFK-скриптов:

  • - выглядят как %1 %2 %3 to %9 или с sfk для Windows также как $1 $2 $3
  • - используются со скриптом sfk и вызовом/меткой
  • - передаются в командную цепочку сценария или метки, где они никогда не изменяются

    Примеры

    Ввод «filt.bat in.txt --+foo» запустит фильтр sfk с использованием параметров «in.txt» и «-+foo».
    В Windows %~f0 — это абсолютное имя пакетного файла, включая расширение .bat или .cmd.

    Файл filt.bat


      sfk script "%~f0" -from begin %*
      GOTO end
      sfk label begin
         +filter %1 %2
         +end
      :end
    

    Глобальные переменные

  • - устанавливаются так:
      sfk setvar myvar="the test text" ...
      sfk echo foo +setvar myvar ...
      sfk xed in.txt "/foo*bar/[setvar myvar][part2][endvar]/" ...
    
  • - используются дальнейшими командами в цепочке, например:
      sfk ... +getvar myvar
      sfk ... +echo -var "using #(myvar)"
      sfk ... +xed "_*_[part1][getvar myvar][part3]_"
    
    Примечание:

    Для чтения или использования содержимого переменной по шаблону #(имя) необходимо указать опцию -var. Это сделано для того, чтобы избежать нежелательных побочных эффектов с командами, которые получают «#(» во входных файлах или входных текстовых потоках.

  • разрешенные имена переменных:
    Должны начинаться с a-z, затем a-z0-9_

    Примеры:

    sfk setvar file=in.txt +filter -var "#(file)" -+foo - запускает SFK-фильтр, присваивая входное имя файла переменной

    sfk xex in.txt "/foo=*/[setvar fooval][part2][endvar]/" +echo -var "foo is: #(fooval)" - извлекает foo=(любой текст) из in.txt, помещая найденный текст в переменную fooval, а затем выводит его.

    Предопределенные переменные sfk

    #(sys.slash) производит \ под Windows, / под linux

    #(sys.sfkver) текущая версия SFK

    #(sys.numcols) количество столбцов консоли (т.е. ширита)

    #(sys.ownscript.name) имя файла текущего скрипта

    Чтобы получить текст текущего скрипта, используйте, например:

    sfk ... +getvar sys.ownscript.text +filter ...

    Доступ к переменной среды можно выполнить следующим образом:

    #(env.varname)

    Имя переменной не чувствительно к регистру в Windows и использует регистр в Linux.

    Пример:

    sfk -var echo "tmp contains: #(env.TMP)"

    Локальные переменные команд SFK

  • - создаются непосредственно из входного текста, созданного предыдущей командой в цепочке команд.
  • - поддерживаются только в некоторых командах, таких как:

    sfk perline "... $text ..." - выполняет внутренние команды SFK один раз для каждой строки ввода

    sfk filter -tabform "... $col1 ... $col2 ..." разделяет текстовые строки по символу табуляции, что позволяет переформатировать

    СМОТРИТЕ ТАКЖЕ

    sfk setvar установить переменную SFK

    sfk addtovar добавление текстовых строк в переменную SFK

    sfk incvar инкремент числовой переменной

    sfk decvar декремент числовой переменной

    sfk getvar получить SFK или переменную окружения

    Форматирование вывода переменных

    Формальный синтаксис:
    #(-03.4varname)

    С возможными управляющими символами:
    - - форматирование по левому краю, иначе по правому краю
    0 - заполнить нулями, иначе пробелами
    .4 - брать до 4 символов из переменной

    Пример: если переменная i содержит «1», то вывод команды:

    +echo -var ">#(i)<" >1<
    +echo -var ">#(3i)<" > 1<
    +echo -var ">#(-3i)<" >1 <
    +echo -var ">#(03i)<" >001<

    Пример: если переменная s содержит «abcde», то вывод команды:

    +echo -var ">#(.3s)<" >abc<
    +echo -var ">#(5.3s)<" > abc<

    Переменные в функциях

    При чтении текста переменной, например #(имя_переменной), можно применить некоторые дополнительные функции, используя #(func(имя_переменной,...)).

    Доступные функции:

  • strpos(v,'text') - получить индекс текста в пределах v
    0=первый символ, -1=не найдено

  • strpos(v,-case 'text') - то же, с учетом регистра (быстро)

  • strpos(v,myvar) - получить индекс текста из myvar в тексте переменной v

  • strpos(v,-spat '\x20') - поиск по шаблонам косой черты

  • strrpos(v,'text') - поиск справа

  • contains(v,'text') - сообщает 1, если текст найден в v, иначе 0.
    Принимает -case и -spat

  • contains(v,-case a) - сообщает, содержится ли текст из переменной a внутри v, используя быстрый поиск с учетом регистра

  • begins(v,'word') - проверить, начинается ли строка со слова, возвращает 1 (да) или 0 (нет)>

  • ends(v,'word') - проверить, заканчивается ли строка словом, возвращает 1 (да) или 0 (нет).

  • substr(v,o[,l]) - подстрока от смещения o длина l, которые сами могут быть переменными.
    Смещение 0 - это первый символ, отрицательный o начинается с правой стороны минус О

  • rsubstr(v,o[,l]) - подстрока с правой стороны, принимая до l символов в левом направлении

  • [l/r]trim(v) - убрать пробелы по бокам

  • isset(v) - 1, если установлено v, иначе 0

  • size(v)- количество байт в V

  • strlen(v) - количество символов в v, если он содержит только обычный текст

  • numlines(v) - количество строк в V

    Пример: если переменная s содержит «foo bar», то вывод команды:
    +echo -var "#(substr(a,4,3))" bar
    +echo -var "#(strpos(a,'bar'))" 4