bash脚本中命令的“源”输出为多个变量

时间:2015-09-18 06:22:36

标签: bash awk

我有MSI文件,里面有version.ini文件,里面包含我需要取出的多个变量。

例如:

[VERSION]
fileid=...
version=...
option=...

所以我有简单的命令:

cabextract -p -F "version.ini" installer.msi | awk -F '=' '{if ($1 == "fileid" || $1 == "version" || $1 == "language") print tolower($1)"=\""$2"\"";}' > /tmp/tmpoutput
source /tmp/tmpoutput
echo $version

并且我实现了从msi文件中提取version.ini并从我想要的ini文件信息中提取。

但只是出于好奇,有没有更漂亮的版本可以取出变量而无需将其临时写入文件。 它有nosense,但我找不到另一种工作和简单的方法来加载多个变量。

如果我写这样的命令:

var=$(cabextract -p -F "version.ini" installer.msi | awk -F '=' '{if ($1 == "fileid" || $1 == "version" || $1 == "language") printtolower($1)"=\""$2"\"";}')

它不起作用。 我无法在$()中输入命令,因为它会合并awk命令的结果。 我试图将它放入阵列,但也失败了。

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

您可以在此处使用process substitution

ListView lv = (ListView)findViewById(android.R.id.list);
TextView emptyText = (TextView)findViewById(android.R.id.empty);
lv.setEmptyView(emptyText);

使用source <(cabextract -p -F "version.ini" installer.msi | awk -F '=' '{if ($1 == "fileid" || $1 == "version" || $1 == "language") print tolower($1)"=\""$2"\"";}') 的此指令输出将像文件一样用于cabextract