Что делает этот expr в сценарии оболочки?

Что делать следующим образом?

newProg=`expr "${newProg}" : ".* -> \(.*\)$"` if expr "x${newProg}" : 'x/' >/dev/null; then prog="${newProg}" else progdir=`dirname "${prog}"` prog="${progdir}/${newProg}" fi 

One Solution collect form web for “Что делает этот expr в сценарии оболочки?”

В первой строке используется expr :

  • Сопоставьте значение $newProg с основным регулярным выражением .* -> \(.*\)$ (Привязано на обоих концах). В этом что-то есть -> в нем.
  • Установите newProg в часть исходного значения, соответствующее подвыражению захвата, записанному в круглых скобках (после -> ).

Жадные семантики соответствия таковы, что это всегда захватывает и выводит последнее такое совпадение, поэтому на выходе никогда не было -> .

Это, например, проанализирует вывод ls -l на символическую ссылку для поиска цели (с учетом корректных имен файлов и т. Д., Обычных предостережений).

Вторая строка снова использует expr чтобы проверить, начинается ли новое значение newProg с / , т. newProg Представляет собой абсолютный путь.

В случае, если это так, prog просто устанавливается на это значение. В противном случае prog устанавливается на вычисленный относительный путь, используя dirname в $prog , переменную, не определенную в этом фрагменте. По-видимому, эффект будет заключаться в построении пути относительно этого исходного местоположения.


Если вы ориентируетесь только на более эффективную оболочку или среду, отличную от чистой POSIX, скорее всего, это будет более надежный способ сделать это, чем expr . readlink является очень доступной командой, которая сэкономила бы при разборе ls .

  • Передача данных в stdin процесса без возникновения EOF впоследствии
  • Поиск файла для числа, которое находится между двумя конкретными номерами
  • Команды MAC bash перестают работать должным образом
  • Подстановочный знак Bash для соответствия точно n символам
  • дождитесь завершения подключения autossh
  • Как извлечь строки, начинающиеся с определенного письма?
  • Сравните два раза в формате HH: MM: SS - ksh
  • Запросить пользователя для предложения и сохранить его, не нарушая пространства
  • Разложить аргумент bash пробелом
  • zsh: команда map для массива
  • Вставить текст по определенному номеру строки
  • Interesting Posts

    Как узнать, сколько памяти занимает программа

    Преобразование одного загрузочного одиночного жесткого диска в RAID 1 без его удаления

    Как проверить пассивный и активный FTP

    Знак по умолчанию для пакетов с использованием iptables

    Как я могу выполнить эхо-вывод команды, которая ничего не возвращает / null?

    Запрещенное ограничение обработчика сигнала процесса инициализации pid-имен

    Запуск Linux в swap обратно в память

    rsync несколько файлов для нескольких каталогов

    vim regex для поиска строк, содержащих string1 AND string2

    Проблемы с созданием Debian live USB

    Установите устройство в раздел, расположенный на другом устройстве

    Перенаправить все вывод сценария bash (изнутри скрипта) в два файла: один append, one rewrite; но отбрасывать вывод на консоль

    Как отключить KWallet в KDE 5.4, когда KWallet Manager всегда не отвечает?

    Буферизованные файлы ограничены размером 1 ГБ

    Выключить экран, когда он неактивен для периода времени в RHEL и Debian

    Linux и Unix - лучшая ОС в мире.