提问人:user3142695 提问时间:10/8/2021 更新时间:10/8/2021 访问量:202
如何处理或开除EOF内部的变量以写入文件内容?
How to process or excape variables inside of EOF to write file content?
问:
这就是我通过 shell 创建文件()的方式。
由于我正在使用的文件内容中有字符。nginx.conf
$
EOF
if [ $type == "nginx" ]; then
cat > ${path}/nginx.conf <<'EOF'
server {
listen 3000;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
try_files $uri $uri/ /index.html =404;
}
include /etc/nginx/extra-conf.d/*.conf;
}
EOF
fi
现在我必须使用动态端口值,因此我需要使用 .
但这行不通,因为在内容中还有 ,它应该作为文本处理,而不是作为变量处理。listen 3000
listen $port
$uri
答:
2赞
chepner
10/8/2021
#1
仅使用分隔符本身,可以扩展所有参数,也可以不扩展。你必须允许扩张,但要逃避美元符号来抑制他们的扩张。$uri
if [ "$type" = "nginx" ]; then
cat > "${path}/nginx.conf" <<EOF
server {
listen $port;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
try_files \$uri \$uri/ /index.html = 404;
}
include /etc/nginx/extra-conf.d/*.conf;
}
EOF
fi
此处文档的行为类似于双引号字符串:
$ foo=bar
$ echo "$foo"
bar
$ echo "\$foo"
$foo
评论
0赞
user3142695
10/8/2021
应该是还是?listen $port
listen ${port}
0赞
chepner
10/8/2021
两者都很好。 是编写参数扩展的规范方法,但可以省略大括号,因为您没有使用任何扩展运算符,并且不能将其视为参数名称的一部分。${port}
;
0赞
chepner
10/8/2021
(不要问我为什么最初用而不是端口号替换状态代码。现已修复。$port
评论