输出 ${projSRC} 到以 Bash 脚本格式的文件



我正在编写一个为项目创建CMakeLists.txt文件的Bash脚本。
问题出现在以下部分:

    echo "file(GLOB projSRC src/*.cpp)" >> CMakeLists.txt

之后,我需要程序将${SOURCES}输出到 CMakeList 中.txt
我的意思不是脚本中名为 SOURCES 的变量,我的意思是它实际上应该编写明文${SOURCES}

我的意思是,最终文件应该看起来像这样:

arbitrary_command(target PROJECT sources ${SOURCES})  

而不是像:

arbitrary_command(target PROJECT sources [insert however bash messes it up here])

如何在我的 Bash 脚本中执行此操作?

对文本字符串使用单引号,而不是双引号:

echo 'file(GLOB ${projSRC} src/*.cpp)' >> CMakeLists.txt

也就是说,在这种情况下,您可以考虑使用 heredoc(甚至是引用的 heredoc),将整个文件编写为一个命令:

cat >CMakeLists.txt <<'EOF'
everything here will be emitted to the file exactly as written
${projSRC}, etc
even over multiple lines
EOF

。或者,如果你想要一些替换,一个没有引用的Heredoc(也就是说,符号 - 在这些例子中EOF - 没有在开头引用):

foo="this"
cat >CMakeLists.txt <<EOF
here, parameter expansions will be honored, like ${foo}
but can still be quoted: ${foo}
EOF

您还可以让多个命令将输出写入单个重定向,以避免支付多次打开输出文件的费用:

foo=this
{
  echo "Here's a line, which is expanded due to double quotes: ${foo}"
  echo 'Here is another line, with no expansion due to single quotes: ${foo}'
} >CMakeLists.txt

可能是我不明白你的问题...

echo ${SOURCES}

将打印

${SOURCES} 

给你的。

相关内容

  • 没有找到相关文章

最新更新