【发布时间】:2014-08-08 17:12:39
【问题描述】:
有一些包含两个数组的bash 脚本:
names=( [0]=port_shutdown
[1]=port_http
[2]=port_https
[3]=keystore_file
[4]=key_alias
[5]=keystore_pass
[6]=truststore_file
[7]=truststore_pass )
value=( [0]="$port_shutdown"
[1]="$port_http"
[2]="$port_https"
[3]="$keystore_file"
[4]="$key_alias"
[5]="$keystore_pass"
[6]="$truststore_file"
[7]="$truststore_pass" )
还有变量:
port_shutdown="8008"
port_http="8046"
port_https="8446"
keystore_file="tomcat.jks"
key_alias="tomcat"
keystore_pass="password"
truststore_file="trustcacerts.jks"
truststore_pass="password"
循环运行:
while [ "$i" -lt "11" ]; do
name="${names[${i}]}"
value="${value[${i}]}"
echo -e "Changing name - "$name" to value "$value";\n"
sed 's|'"${name}"'|'"${value}"'|g' "server.xml.default" > "server.xml"
(( i++ ))
done
但它不会改变names...虽然 - 它看到变量中的值:
$ ./config.sh
Changing name - port_shutdown to value "8008";
Changing name - port_http to value 8046;
Changing name - port_https to value 8446;
Changing name - keystore_file to value tomcat.jks;
Changing name - key_alias to value tomcat;
Changing name - keystore_pass to value password;
Changing name - truststore_file to value trustcacerts.jks;
Changing name - truststore_pass to value password;
如果我设置例如 name="port_shutdown" 和 value="8008" - 效果很好...
我在这里做错了什么?
【问题讨论】:
-
这看起来很尴尬:
value="${value[${i}]}"。这将数组value的第零个字段的值设置为${value[${i}]}的扩展。当然不是你想要的(但在你的 sn-p 中没有不良影响)。