Aar*_*ron 2 bash environment-variables
当变量用引号引起来时,是否可以使用 HEREDOC 并进行变量扩展?
示例:$package 是在脚本运行之前设置的环境变量
#!/bin/bash
cat > out.json <<'EOF'
{
"apps": [
{
"cwd":"/usr/local/$package"
}
}
EOF
Run Code Online (Sandbox Code Playgroud)
如果 $package="www" 则预期输出
{
"apps": [
{
"cwd":"/usr/local/www"
}
}
Run Code Online (Sandbox Code Playgroud)
长话短说
\n使用<<EOF而不是<<'EOF'.
这就是 POSIX 关于此处文档的说法 [强调我的]:
\n\n\nRun Code Online (Sandbox Code Playgroud)\n[n]<<word\n here-document\ndelimiter\n[\xe2\x80\xa6]
\n如果 的任何部分
\nword被引用,则通过对 进行去引号操作来形成分隔符word,且此处文档行不会被扩展。否则,分隔符应为其word本身。如果没有
\nword引用 的任何部分,则应扩展此处文档的所有行以进行参数扩展、命令替换和算术扩展。[\xe2\x80\xa6]
在您的情况下word是'EOF'(引用!),因此$package此处文档内部不会扩展。删除这些引号,您将获得所需的结果。
cat > out.json <<EOF\n{\n "apps": [\n {\n "cwd":"/usr/local/$package"\n }\n}\nEOF\nRun Code Online (Sandbox Code Playgroud)\n请注意,这与此处文档内变量周围的引号无关。
\n| 归档时间: |
|
| 查看次数: |
3476 次 |
| 最近记录: |