Что делает этот 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 .

  • Как написать скрипт для выполнения файлов в нескольких каталогах
  • Разбиение последовательности на фиксированную ширину
  • fdupes - удалять файлы после сравнения двух каталогов
  • Использование функции, определенной в родительском скрипте
  • Создание shebang, указывающее переносимо интерпретатору в папке сценария
  • Как использовать kdialog progressbar из сценария Bash, когда панель была инициализирована в другом скрипте?
  • ссылочная переменная оболочки $ COLUMNS из сценария bash
  • Запуск emacsclient со сценарием
  • Почему эти вложенные параметры в сценарии оболочки POSIX разделены словом?
  • Код выхода в конце скрипта bash
  • Как безопасно передавать переменные в сценарии с поддержкой root?
  • Interesting Posts

    Проблемы с Kali Linux 4.6.0-kali1-686-pae

    какие инструменты я могу использовать, чтобы быстро показать / скрыть некоторые напоминания о себе?

    Я не могу подключиться к моему маршрутизатору, когда меняю адрес wlan0 mac на Ubuntu 14.04

    Когда Gentoo выходит из мира, он начинается с самого начала. Зачем?

    Разница между fsarchiver и дампом

    Найти и заменить с помощью sed с помощью подстановочных знаков при поиске и замене

    Компилировать общую библиотеку из кода asm с текущими источниками

    Как я могу отредактировать изображение squashfs напрямую без извлечения и повторной упаковки?

    Смешение пулов на монетном дворе

    Как решить проблему диспетчера окон в Linux Mint 14 Xfce после установки LXDE?

    Как связать супер-ключ с Ctrl + Shift с помощью xmodmap?

    применить темы zsh вручную

    Нет свободного места в буфере – ICMP

    жадные и ленивые регулярные выражения (вопрос понимания)

    Мой сетевой адаптер присутствует, но с помощью команды «lshw» показано, что «устройство не заявлено». Как заявить этот драйвер / устройство?

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