【问题标题】:line of bash code from .configure file.configure 文件中的 bash 代码行
【发布时间】:2009-09-22 15:58:12
【问题描述】:
我需要理解下面这行代码:
BIN_DIR=`grep BIN_DIR= $SMLCM | head -1`
$SMLCH 包含路径
这是我目前所理解的:
grep 将产生一些字符串,可能的路径。 grep 对BIN_DIR= 有什么作用?
路径被传递给head,路径中的所有文件都将用于提取它们的第一行
某些东西被评估(究竟是什么?)并存储在BIN_DIR
最好的问候,
西蒙
【问题讨论】:
标签:
bash
grep
configuration-files
pipe
head
【解决方案1】:
这将在 $SMLCM 变量中指定的文件中找到所有出现的文字字符串“BIN_DIR=”,并且只获取该输出的第一行并将其分配给 BIN_DIR。
请注意,这可能无法按您希望的方式工作,因为分配给 BIN_DIR 的是一些字符串,例如“BIN_DIR=blah”,它可能具有与以下相同的效果:
BIN_DIR="BIN_DIR=blah"
【解决方案2】:
- grep 将匹配由 var $SMLCM 命名的文件内容中包含 BIN_DIR= 的每一行
- head 将占据第一行
- 此行(反引号内的命令的结果)被重新分配给 BIN_DIR
【解决方案3】:
这将仅提取$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 :完成替换并打印结果