现状
我有一个外部属性文件,其中存储了两个变量。其中之一有一个值列表(最小1值,最大X值)。
当在shell脚本中声明这个单一列表时,如下所示:
NODES=(
"node"
"node-2"
"node-3"
)我从属性文件中读取的值如下:
# checks, if file exists and is readable
file="./properties.credo"
if [ ! -r "$file" ]
then
echo "fatal: properties file $file not found / readable."
exit 2
fi
# loads properties into variables
. $file
[[ -z "$VALUEA" ]] && echo "fatal: VALUEA not specified in .credo" && exit 2
...问题
在属性中定义节点值时,如下所示:
NODES=node,node-2,node-3..。读到这一点:
...
[[ -z "$NODES" ]] && echo "fatal: NODES not specified in .credo" && exit 2
.....。它将作为单个字符串node,node-2,node-3从文件中读取,而不是作为列表或一维数组读取。
发布于 2022-01-03 20:59:36
当心!这是危险的,因为配置文件可以包含PATH=/some/path,然后脚本可以执行您无法控制的命令。
可以使用read -a填充数组。将IFS设置为分隔符,并将从文件中读取的值发送到read的标准输入。
#! /bin/bash
file=$1
IFS== read var values < "$file"
IFS=, read -a $var <<< "$values"
echo "${NODES[@]}"对于多行配置,我尝试了以下操作:
nodes=node1,node2,node3
servers=server1,server2并修改脚本以循环输入:
#! /bin/bash
file=$1
while IFS== read var values ; do
IFS=, read -a $var <<< "$values"
done < "$file"
echo "${nodes[@]}"
echo "${servers[@]}"您可能需要跳过不遵循var=val1,val2,...模式的行。
https://stackoverflow.com/questions/70571168
复制相似问题