有一些bash
腳本包含兩個數組:的sed VS陣VS可變
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
但它不」 t change 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"
- 它的工作好...
我在做什麼錯在這裏?
這看起來好不尷尬:'值= 「$ {值[$ {I}]}」'。這將數組「value」的第零個字段的值設置爲「$ {value [$ {i}]}'的擴展。當然不是你想要的(但在你的片段中沒有不需要的效果)。 –