我有一个获取应用名称和版本
的功能function get_versions() {
ver_file="versions.txt";
for service in $(cat $ver_file | cut -f1 -d:) ; do
for ver in $(grep $service $ver_file | cut -f2 -d:) ; do
local $service_ ver=$ver;
done;
done;
}
我想设置像apache-ver = 2.0这样的环境变量。 (通过echo将是echo $ apache-ver) versions.txt看起来像这样: 阿帕奇:2.0
我尝试了很多方法来设置它 但我没有找到解决方案 感谢
答案 0 :(得分:2)
这是我的版本。我使用cat
和cut
来取消IFS
和read
。请注意,封装在函数中的任何变量都标记为local
。
bash中不能包含包含连字符的变量名,因此apache-ver=2.0
无效。我改用了下划线。
变量是使用eval
动态创建的,这是少数几个有用的场合之一,但是为什么要动态创建变量名称是个谜。如果需要,您可以轻松地将export
添加到该行,但由于动态变量未标记为本地,因此在整个脚本中都可以看到它。
# Use fuction, or (), not both
get_versions() {
local ver_file="versions.txt"
local service ver
while IFS=':' read service ver
do
local name="${service}_ver"
# Sanitize edit
name=${name/[\-.]/'_'}
eval "$name='$ver'"
done < "$ver_file"
}
get_versions
echo $apache_ver
echo $tester_ver
我的versions.txt
看起来像这样:
apache:2.0
tester:3.3
脚本输出:
2.0
3.3
答案 1 :(得分:0)
您可以使用导出来存档此
/ # cat versions.txt
aaaa:01
bbbb:02
/ # cat test.sh
#/bin/bash
ver_file=versions.txt
for service in $(cat $ver_file | cut -f1 -d:) ; do
for ver in $(grep $service $ver_file | cut -f2 -d:) ; do
echo export $service=$ver
done;
done;
/ # eval $(./test.sh)
/ # echo $aaaa
01
/ # echo $bbbb
02
/ #