bash将多行插入到包含数组变量的文本文件中

时间:2015-02-10 22:24:33

标签: arrays bash file printf

我想在文本文件中插入包含数组变量的多行文本,但是它打印变量名而不是插入变量本身,我的代码是:

printf 'server {\n server_name ${cdarray[choice]} www.${cdarray[choice]};\n root /home/nginx/domains/cmmdm/suspendedpage;\n location / {\n try_files $uri $uri/ /index.html;\n }\n}'  >> /usr/local/nginx/conf/conf.d/${cdarray[choice]}.txt

如果数组变量包含' demo-domain.com'输出应如下所示:

server {
server_name demo-domain.com www.demo-domain.com;
root /home/nginx/domains/cmmdm/suspendedpage;
location / {
try_files $uri $uri/ /index.html;
}
}

但它出现了:

server {
server_name ${cdarray[choice]} www.${cdarray[choice]};
root /home/nginx/domains/cmmdm/suspendedpage;
location / {
try_files $uri $uri/ /index.html;
}
}

2 个答案:

答案 0 :(得分:0)

好的,轻松修复,将其从单引号更改为双引号解决了这个问题。

答案 1 :(得分:0)

正如您所注意到的,从单引号更改为双引号似乎来解决问题。然而,这并不是printf应该如何使用。例如,如果您的变量中有一些%个符号,那么您将获得奇怪的结果。而是使用它:

printf 'server {\n server_name %s www.%s;\n root /home/nginx/domains/cmmdm/suspendedpage;\n location / {\n try_files %s %s/ /index.html;\n }\n}' "${cdarray[choice]}" "${cdarray[choice]}" "$uri" "$uri" >> "/usr/local/nginx/conf/conf.d/${cdarray[choice]}.txt"

每个%s将被相应的参数替换。这就是printf的使用方式。