使用特定条件从文件中分配BASH变量

时间:2015-07-16 20:24:44

标签: bash shell awk

最后一行包含数据的配置文件,我想将所有内容分配给=符号的RIGHT到我可以显示的变量中,然后在脚本中调用。

示例:/path/to/magic.conf

foo
bar
ThisOption=foo.bar.address:location.555

bash shell脚本中读取文件最后一行并将所有内容分配到等号右侧的最佳方法是什么?在这种情况下,foo.bar.address:location.555

最后一行始终具有我想要定位的内容,并且文件中只有一个=符号恰好是最后一行。

谷歌和搜索在这里使用sed / awk产生了许多接近但非相对的结果,但我无法想出我正在寻找的东西。

2 个答案:

答案 0 :(得分:1)

使用sed

variable=$(sed -n 's/^ThisOption=//p' /path/to/magic.conf)
echo "The option is: $variable")

这可以通过在行的开头找到并删除ThisOption=标记,并p对结果进行处理来实现。

答案 1 :(得分:0)

重要:此方法绝对要求100%信任该文件。正如评论中所提到的,无论何时“eval”代码而没有任何消毒,都存在严重风险(la“rm -rf /”幅度 - 不要运行......)

纯粹,简单的bash。 (嗯......使用尾部实用程序:-)) 这种方法的优点是,它只需要你知道它将是文件的最后一行,它不需要你知道关于该行的任何信息(例如=符号左边的变量)将是 - 使用sed选项所需的信息)

assignment_line=$(tail -n 1 /path/to/magic.conf)
eval ${assignment_line}
var_name=${assignment_line%%=*}
var_to_give_that_value=${!var_name}

当然,如果您想要拥有该值的var是文件中“=”左侧列出的值,那么您可以跳过上一个赋值并只使用“$ {!var_name} “无论你需要它。”