立即初始化由sed

时间:2020-02-25 09:09:51

标签: linux bash sed

我想在shell脚本中利用.yml中定义的变量。 yaml中的变量采用variable: value的形式。我正在尝试的脚本中:

sed 's/\s*:\s*/=/' *vars.yml*  
echo $variable

但是echo不返回任何内容。是在Shell脚本中实现这种操作的一种方法吗?

3 个答案:

答案 0 :(得分:1)

eval `sed 's/\s*:\s*/=/' *vars.yml*`
echo $variable

答案 1 :(得分:0)

例如,获取命令的输出

$cat vars.yml
var1: value1
var2: value2
var3: value3
$ cat 1.sh
source <(sed 's/\s*:\s*/=/' *vars.yml*)
echo $var1
echo $var2
echo $var3

输出:

value1
value2
value3

答案 2 :(得分:0)

请尝试以下操作:

while IFS= read -r line; do
    declare "$(sed 's/[[:blank:]]*:[[:blank:]]*/=/' <<< "$line")"
done < file.yml

echo "$var1"
echo "$var2"

file.yml

var1: value1
var2: value2

输出:

value1
value2

[说明]

  • 带有while的{​​{1}}循环逐行读取输入文件read 将变量file.yml分配给每个记录。
  • 语法line创建一个名为declare var=value的变量,然后 将其分配给var。命令value不仅接受文字 赋值,但表达式被视为赋值。 在这种情况下,declare命令将行sed转换为 var1: value1,然后var1=value1执行分配。
  • 通常建议不要使用declare ,除非您有完整的 以及由于潜在的安全风险而对输入文件的排他控制。 想象有一个邪恶的家伙在文件中添加了eval行, rm -rf ~/未知。 使用eval的风险应该小于declare