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

Arrays bash在包含数组变量的文本文件中插入多行,arrays,bash,file,printf,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/n

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

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;
}
}

好的,简单的修复,将其从单引号改为双引号解决了问题。

正如您所注意到的,将单引号改为双引号似乎解决了问题。然而,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的使用方法。

尝试使用双引号而不是单引号。谢谢,我一发布就认为双引号是有用的