1. Куча / Говнокод #2168

    +127.8

    1. 1
    _BUILD_FORMAT=`echo ${_FILE_NAME} | awk -F'.' '{ if($5=="gz")printf("%s",1);else printf("%s",2)}'`

    Имя файла имеет вид: xxx.version.src.tar.gz
    Эта проверка на то, какое расширение (и, соответственно, версия того, что внутри. О методе per se не буду, потому что нецензурно). Все бы ничего, пока имя файла не попадает, скажем, ./xxx.version.src.tar.gz

    Запостил: nil, 23 Ноября 2009

    Комментарии (8) RSS

    • Однострочный перл используйте.
      Ответить
      • Не понял...
        Ответить
        • Язык перл можно использовать как grep, awk и sed. При том это мощнее, так как используется мощь перла (всякие операторы перловые можно использовать, модули подключать). Но программы такие дольше писать чем если использовать grep, sed, но в сложных случаях лучше использовать Perl.
          ====
          Вот так это можно написать на Perl:
          echo ${_FILE_NAME} | perl -e 's|^.*/(.*)$|$1|; @a = split ".", $_; if ($a[#a] eq "gz") { printf "%s", $a[0]} else {printf "%s", $a[1]}'

          Предупреждаю: пример не проверял, но вроде всё правильно.

          Здесь можно прочитать про однострочный perl http://habrahabr.ru/blogs/perl/70610/
          Ответить
          • Язык перл не входит в стандарт POSIX.
            Я б тогда вместо перла emacs batch использовал, он еще мощнее. Как написано без перла будет работать на любой машине в любом состоянии и в любом ранлевеле. Не люблю перл, считаю его бесполезным.
            Что же до примера, его в том месте достаточно было написать средствами чистого стандарта шелла:
            case "$_FILE_NAME" in *gz) echo 1;; *) echo 2;; esac
            В большинстве случаев тяжелую артиллерию тащить совершенно не нужно
            Ответить
            • Пардон, точку забыл перед gz, чтобы логика была похожа на исходный пример.
              Ответить
            • Не знаю кто кого мощнее. Сначала перл узнай. Перл не бесполезен.
              Язык, который очень хорошо продуман.
              Ответить
          • perl штука хорошая, но в данном случае надо использовать awk, там тоже регулярки
            Ответить

    Добавить комментарий