如何处理或逃避 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 $port
而不是 listen 3000
。
但这行不通,因为在内容中还有$uri
,应该作为文本处理,而不是作为变量处理。
仅使用定界符本身,扩展所有参数或none。您必须允许扩展,但转义 $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
这就是我通过 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 $port
而不是 listen 3000
。
但这行不通,因为在内容中还有$uri
,应该作为文本处理,而不是作为变量处理。
仅使用定界符本身,扩展所有参数或none。您必须允许扩展,但转义 $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