我有两个shell脚本文件 test1.sh和test2.sh 。我有另一个名为 translogs.txt 的文件 现在我需要将test1.sh中两个变量的值复制到translog.txt,并且需要将相同的变量复制到 test2.sh 中的相应值。
test1.sh
#!/bin/sh
ONE="000012"
TIME="2013-02-19 15:31:06"
echo -e "$ONE\n$TIME">translog.txt;
translog.txt
ONE="000012"
TIME="2013-02-19 15:31:06"
但是在 test2.sh 中,我想要与translog.txt中相同的值到相应的变量
test2.sh
#!/bin/sh
ONE="000012"
TIME="2013-02-19 15:31:06"
答案 0 :(得分:2)
$> cat translog.txt
ONE="000012"
TIME="2013-02-19 15:31:06"
使用perl
正则表达式grep
可以使用 lookbehind 运算符匹配这些值。
$> grep --only-matching --perl-regex "(?<=ONE\=).*" translog.txt
"000012"
对于TIME
:
$> grep --only-matching --perl-regex "(?<=TIME\=).*" translog.txt
"2013-02-19 15:31:06"
因此,通过使用test2.sh
脚本,您可以像这样使用它:
#!/bin/bash
ONE=`grep --only-matching --perl-regex "(?<=ONE\=).*" translog.txt`
TIME=`grep --only-matching --perl-regex "(?<=TIME\=).*" translog.txt`
下面其中一个链接指出的另一个解决方案是使用:
source
(a.k.a。.
)命令将文件中的所有变量加载到当前shell中:
$ source translog.txt
现在您可以访问文件中定义的变量值:
$ echo $TIME
"2013-02-19 15:31:06"
@ user2086768提到了另一种方法。把这些行放到`test2.sh:
#!/bin/bash
eval $(cat translog.txt)
因此,您将在test2.sh
脚本中分配两个变量:
ONE="000012"
TIME="2013-02-19 15:31:06"
您可以轻松检查添加:
echo $ONE
echo $TIME
同时检查以下链接:
答案 1 :(得分:1)
由于translog.txt
是有效的bash代码,您可以执行以下操作:
source translog.txt
test2.sh
中的,ONE
和TWO
将在test2.sh
中提供。
一句警告,如果ONE
和TWO
的值来自不受信任的来源,那么会打开shell脚本注入攻击。
答案 2 :(得分:0)
eval应该适合你。
尝试使用此版本的test2.sh:
<强> test2.sh 强>
#!/bin/bash
eval $(cat translog.txt)
echo $ONE
echo $TIME
输出:
000012
2013-02-19 15:31:06