我试图从另一个脚本访问一个脚本变量,例如,
script1.sh:
export a=10
export b=20
echo "testing"
exit
script2.sh:
. script1.sh
echo $a
此处涉及的问题是它能够从 script2 中的 script1 访问变量'a',但是它正在执行所有命令在 script1.sh 这很烦人。我只想访问 script1 中的导出变量,而不想在 script2 中调用 script2 中的命令。
>请帮忙!
谢谢,
KARTHIK
答案 0 :(得分:2)
分配变量是一个命令。除非你准备用bash编写一个bash解析器,否则你无法做到。
答案 1 :(得分:2)
您要做的事情(仅从其他脚本获取变量,而不执行命令)是不可能的。
这是一种解决方法:
将变量声明和初始化提取到第三个文件,然后由两个文件提供。
共瓦尔:
export a=10
export b=20
script1.sh:
. common-vars
echo "testing"
exit
script2.sh:
. common-vars
echo $a
答案 2 :(得分:1)
如果你的变量作业只是以完全形式 ,那就是
export a=10
然后您可以使用grep
和eval
结果提取这些作业。那么你的script2.sh就是
eval `grep "^export " script1.sh`
echo $a
但这样做非常脆弱,可以在很多方面打破。将变量赋值放在由其他人提供的第三个脚本中的建议更安全。
如果在条件句中有变量设置,或者导出的变量依赖于遗漏的其他非导出变量,或者单独设置和导出变量,则可能会中断;如果你碰巧在你的出口中使用命令替换,那么它们仍会因其可能的副作用而运行。
if [ $doexport = 1 ]; then
export a=1
fi
a=2
export a
b=2
export a=$b
export a=`ls |wc -l`
这些都可能存在问题。
答案 3 :(得分:0)
我同意Ignacio Vazquez-Abrams的观点。
分配变量是一个命令
你无能为力。
一个可能的解决方案是将变量定义分离到第三个脚本,该脚本将用作配置脚本。所以 script1 和 script2 都会source
那个,使用那里定义的变量。
答案 4 :(得分:0)
script2.sh:
eval "$(grep export script1.sh)"
echo $a
答案 5 :(得分:0)
我同意“Ignacio Vazquez-Abrams”这是对你的问题的一个很好的答案。
但我有另一个解决方案,你没有导出你的变量。概念基于:使用Login shell运行脚本而不是新shell。
让我们说你的script1.sh是:
a=10
b=20
现在在您的登录shell中运行您的脚本:
示例:
.[space]script1
现在,如果您将在脚本中访问变量a,那么您将可以访问它。
示例
让我们说你的script2.sh是:
echo $a
运行:
.[space]script2
答案 6 :(得分:0)
您可以通过将变量作为参数传递,将变量从一个脚本传递到另一个脚本。 这当然意味着脚本B将被脚本A调用。脚本B将需要检查传递的参数是否为空。