строка кода bash из файла .configure - PullRequest
0 голосов
/ 22 сентября 2009

Мне нужно понять следующую строку кода:

BIN_DIR=`grep BIN_DIR= $SMLCM | head -1`

где $SMLCH содержит путь

Это то, что я понял до сих пор:

  • grep даст несколько строк, возможных путей. Что делает grep с BIN_DIR=?

  • пути передаются голове, и все файлы в путях будут использоваться для извлечения их первой строки

  • что-то оценивается (что именно?) И сохраняется в BIN_DIR

С уважением,

Simon

Ответы [ 3 ]

1 голос
/ 22 сентября 2009

Это найдет все вхождения литеральной строки "BIN_DIR =" в файле, указанном в переменной $ SMLCM, и возьмет только первую строку этого вывода и присвоит его BIN_DIR.

Обратите внимание, что это может работать не так, как вы хотите, поскольку в BIN_DIR присваивается некоторая строка, например "BIN_DIR = blah", то есть она может иметь тот же эффект, что и следующий:

bin_dir = "bin_dir = бла"

1 голос
/ 22 сентября 2009
  • grep будет соответствовать каждой строке, содержащей BIN_DIR = внутри содержимого файла, названного переменной $ SMLCM
  • голова займет первую строку
  • эта строка (результат команд внутри обратных тиков) переназначается на BIN_DIR
0 голосов
/ 22 сентября 2009

Это извлечет только значение $BIN_DIR при первом появлении в файле, указанном $SMLCM, и присвоит его переменной $BIN_DIR в текущем скрипте:

BIN_DIR=$(sed -n 's/^BIN_DIR=\(.*\)$/\1/p' $SMLCM | head -n 1)
  • sed -n: запустить редактор потоков и не печатать каждую строку так, как она выглядит
  • s/: заменить
  • ^BIN_DIR=: строка, которая начинается ("^") с текста "BIN_DIR ="
  • \(.*\)$: и заканчивается ("$") группой ("\ (\)"), равной нулю или более ("*") любых символов (".")
  • /: заменить это совпадение на
  • \1: содержимое первой (в данном случае только) группы
  • /p: завершить подстановку и распечатать результаты
...