我想在文本文件中插入包含数组变量的多行文本,但是它打印变量名而不是插入变量本身,我的代码是:
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;
}
}
答案 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
的使用方式。