Linux 动态初始化sed转换的变量
我想在shell脚本中使用Linux 动态初始化sed转换的变量,linux,bash,sed,Linux,Bash,Sed,我想在shell脚本中使用.yml中定义的变量。yaml中的变量形式为变量:值。在我正在尝试的脚本中: sed 's/\s*:\s*/=/' *vars.yml* echo $variable 但是echo不返回任何内容。这是在shell脚本中实现此类操作的一种方法吗?将命令的输出作为源,例如 $cat vars.yml var1: value1 var2: value2 var3: value3 $ cat 1.sh source <(sed 's/\s*:\s*/=/' *var
.yml
中定义的变量。yaml中的变量形式为变量:值
。在我正在尝试的脚本中:
sed 's/\s*:\s*/=/' *vars.yml*
echo $variable
但是
echo
不返回任何内容。这是在shell脚本中实现此类操作的一种方法吗?将命令的输出作为源,例如
$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
请您尝试以下方法:
while IFS= read -r line; do
declare "$(sed 's/[[:blank:]]*:[[:blank:]]*/=/' <<< "$line")"
done < file.yml
echo "$var1"
echo "$var2"
输出:
value1
value2
[解释]
循环使用while
逐行读取输入文件read
将变量file.yml
分配给每个记录行
- 语法
创建一个名为declare var=value
的变量,然后 将其分配给var
。命令值
不仅接受文本 赋值,但作为赋值计算的表达式。 在这种情况下,declare
命令将行sed
转换为var1:value1
然后var1=value1
执行赋值declare
- 通常不建议使用
,除非您有完整的 由于潜在的安全风险,对输入文件进行独占控制。 想象一下,某个邪恶的家伙在文件中添加了一行eval
,结果是rm-rf ~/
ed不知道。 使用eval
应该比declare
风险小eval
sed
不会运行替换结果。您没有将sed的输出分配给$variable,如果没有对code@l00p谢谢你的反馈。我在回答中加了一个解释。希望有帮助。谢谢!这正是缺少的,因为eval
将执行编辑的字符串,从而创建一个变量。
while IFS= read -r line; do
declare "$(sed 's/[[:blank:]]*:[[:blank:]]*/=/' <<< "$line")"
done < file.yml
echo "$var1"
echo "$var2"
var1: value1
var2: value2
value1
value2